【发布时间】:2020-02-29 08:39:28
【问题描述】:
我想知道是否有人可以帮助我。 如果我有一个具有属性的类,是否有办法自动使该类的对象在调用时返回该属性
class Constant():
def __init__(self, value):
self.__value = value
PI = Constant(3.14)
有没有办法让它返回 3.14(作为实际的浮点数而不是字符串)而不显式定义 __float__ 方法并调用 float(PI)。我希望能够按照print(PI*2) 的方式说一些话,并将6.28 作为我的输出
编辑:
我找到了我想要的,通过使用__new__ 方法,我可以将实例的返回值更改为我想要的任何值。
第二次编辑: 事实证明这不起作用。
【问题讨论】:
-
self.__value = float(value)有效吗? -
@Tserenjamts __value 是正确的“值”(想不出另一个词),问题是在几乎像宏一样调用 PI 的地方返回它,我希望 PI 像浮点变量除了内部控制更多
-
如果您想在尝试对实例执行任何操作时自动将其实例替换为其他对象,为什么还要拥有这个类?
-
@OwenMehta-Jones:但是...如果您有您要求的这种自动替换功能,您将不会能够执行任何强制执行,而且您将无法提供额外的方法。即使你在你的类上定义了一些
foo方法,你也不能做PI.foo(),因为PI会被3.14替换,而3.14没有foo方法。 -
首先,这与 Python 的执行模型根本不兼容。其次,你会发现你想“只返回 3.14”的情况并不像你想象的那么明确。例如,您将无法将类的实例传递给其他函数,因为
foo(PI)是“没有附加任何方法调用的 PI”。你也很难访问像is_integer这样的float方法,因为PI.is_integer()有一个“附加的方法调用”。
标签: python class methods types