Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python类返回类型_Python_Class_Methods_Types - Fatal编程技术网

Python类返回类型

Python类返回类型,python,class,methods,types,Python,Class,Methods,Types,我想知道是否有人能帮我做点什么。 如果我有一个具有属性的类,有没有一种方法可以在调用该类的对象时自动使其返回该属性 class Constant(): def __init__(self, value): self.__value = value PI = Constant(3.14) 它有没有办法返回3.14(作为实际的浮点而不是字符串),而不显式地定义\uuuuufloat\uuuuuu方法并调用float(PI)。我希望能够按照print(PI*2)的思路说些什么,并将6.28作

我想知道是否有人能帮我做点什么。 如果我有一个具有属性的类,有没有一种方法可以在调用该类的对象时自动使其返回该属性

class Constant():
def __init__(self, value):
    self.__value = value
PI = Constant(3.14)
它有没有办法返回3.14(作为实际的浮点而不是字符串),而不显式地定义
\uuuuufloat\uuuuuu
方法并调用
float(PI)
。我希望能够按照
print(PI*2)
的思路说些什么,并将
6.28
作为我的输出

编辑: 我找到了我想要的,通过使用
\uuuu new\uuu
方法,我可以将实例的返回值更改为我想要的任何值

第二次编辑:
结果证明这不起作用。

尝试子类化
float

class Constant(float):
    def __init__(self, value):
        self.__value = value
PI = Constant(3.14)
print(PI*2)
输出:

6.28

尝试子类化浮动:

class Constant(float):
    def __init__(self, value):
        self.__value = value
PI = Constant(3.14)
print(PI*2)
输出:

6.28

请尝试访问私有变量

class Constant():
    def __init__(self, value):
        self.__value = value

PI = Constant(3.14)
print(PI._Constant__value*2)


请尝试访问私有变量

class Constant():
    def __init__(self, value):
        self.__value = value

PI = Constant(3.14)
print(PI._Constant__value*2)



self.\uuuu value=float(value)
它工作吗?@Tserenjamts\uuuu value是正确的“value”(想不出另外一个词),问题是在调用PI的地方返回它,几乎像宏一样,我希望PI像一个浮点变量,除了内部控制多一点为什么你甚至会有这个类,如果您想在尝试对实例执行任何操作时自动将其实例替换为其他对象?@Owenmeta Jones:但是。。。如果您拥有所要求的自动替换功能,您将无法执行任何强制操作,也无法提供额外的方法。即使您在类上定义了一些
foo
方法,您也无法执行
PI.foo()
,因为
PI
将被
3.14
取代,
3.14
没有
foo
方法。首先,这与Python的执行模型基本不兼容。第二,你会发现你想要“只返回3.14”的情况并不像你想象的那样明确。例如,您将无法将类的实例传递给其他函数,因为
foo(PI)
是“没有附加任何方法调用的PI”。您访问
float
方法(如
is\u integer
)时也会遇到问题,因为
PI.is\u integer()
附加了一个“方法调用”。
self.\uu value=float(value)
它是否工作?@Tserenjamts\u value是正确的“值”(想不出其他单词),问题是在调用PI的任何地方都会返回它,就像宏一样,我希望PI像一个浮点变量,只是内部控制多一点。如果你想在尝试对实例执行任何操作时自动用其他对象替换它的实例,为什么还要有这个类?@Owenmeta Jones:但是。。。如果您拥有所要求的自动替换功能,您将无法执行任何强制操作,也无法提供额外的方法。即使您在类上定义了一些
foo
方法,您也无法执行
PI.foo()
,因为
PI
将被
3.14
取代,
3.14
没有
foo
方法。首先,这与Python的执行模型基本不兼容。第二,你会发现你想要“只返回3.14”的情况并不像你想象的那样明确。例如,您将无法将类的实例传递给其他函数,因为
foo(PI)
是“没有附加任何方法调用的PI”。访问
float
方法(如
is\u integer
)时也会遇到问题,因为
PI.is\u integer()
附加了“方法调用”。这只适用于乘法。。我认为@Owen Mehta Jones正在寻找一种能让他们将PI作为数字来对待的东西。@LocalhostNotfound Now?这要好得多,但我希望能用多种数据类型来实现这一点,除非我只为每种类型创建子类…?@Owenmeta Jones还有哪些其他类型?@U10基本上转发任何内置类型。这只适用于乘法。。我认为@Owen Mehta Jones正在寻找一种能让他们将PI作为数字来对待的东西。@LocalhostNotfound Now?这要好得多,但我希望能用多种数据类型来实现这一点,除非我只是为每种类型创建子类…?@Owenmeta Jones还有哪些其他类型?@U10基本上转发任何内置类型。不完全是我想要的。如果我真的需要,我会创建一个
@property
方法,让用户每次都输入PI.val,但我需要一个常量类,在这个类中,您可以调用对象并获取返回值。这不是我想要的。如果我真的需要,我会创建一个
@property
方法,让用户每次都输入PI.val,但我需要一个常量类,在这个类中,您可以调用对象并获取返回的值。