gpt4 book ai didi

python - 直接调用时返回值的实例(不是实例)

转载 作者:太空宇宙 更新时间:2023-11-03 19:17:13 24 4
gpt4 key购买 nike

我想要一个类,其实例在直接调用时返回一个值,就像它们继承自 int、float、str 等一样。我想它正在重载某些函数???:

class A(object):
def __init__(self, value):
self.value = value

def somefunction(self):
if isintance(self.value, int):
return 5
else:
return 'something else'

def __???__(self):
return self.value

a = A(2)
a + 5 # 7
a.somefunction() # 5

a = A('foo')
a + "bar" # 'foobar'
a.somefunction() # 'something else'

我不能简单地对 int 进行子类化,因为该值可能是不同的类型。

这可行吗?也许有一个很好的理由不能这样做,但已经晚了,我也想不起来了。提前致谢。

最佳答案

覆盖__getattr__由于元类困惑而无法工作;问题是相关方法需要位于实例的类字典中。

如果您对value感到满意由于不可变,一种方法可能是覆盖 __new__并按需构建类:

def __new__(cls, value):
return type("A", (type(value), A), {})(value)

请注意,这将 A之后type(value)在维修中;这是必要的阻止__new__导致递归失控!如果 A 上有方法应该覆盖type(value)上的那些,您可以将它们放入字典的第三个参数 type() 中.

关于python - 直接调用时返回值的实例(不是实例),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10975785/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com