我正在编写一个类,它需要表现得好像它是另一个类的实例,但还有其他方法和属性。我在__new__
内尝试过不同的事情,但无济于事。例如,这是一个半写的类和所需的行为:
class A(object):
def __new__(self, a):
value = 100 # instances of A need to behave like integers
... # bind A methods and attributes to value?
return value
def __init__(self, a)
self.a = a
def something(self):
return 20 + self.a
这是理想的行为:
a = A(10, 5)
print(a + 10) # 110
print(a * 2) # 200
print(a.b) # 5
print(a.something()) # 25
我知道当__new__
返回不同于A
的类的实例时,__init__
和其他方法不会绑定到value
。其他方法都不是。这种事情有可能吗?我是否以错误的方式思考这个问题?
修改
请注意,此类不会返回整数实例,仅用于示例目的。
之所以(我认为)我不能只是子类,在本例中是int
,是因为我需要在调用它时构造类。 __init__
没有返回任何内容,否则,我可以做类似的事情:
class A(object):
def __init__(self, a):
self.a = a
... # logic constructing `value`
value = 100 # `value` ends up being an integer
return value
def something(self):
return self.a
如果这是相关的,value
是theano TensorVariable
。我想为创建供下游其他功能使用的TensorVariable
实例添加额外的方法和属性。