我不确定这个问题的好头衔是什么,所以我会解释我想要做什么。运行初始化程序类
我想有一个类,它可以在某种程度上像这样被实例化:
class Setting(int):
def __init__(self, value, description=None):
super(Setting, self).__init__(value)
self.description = description
max_memory = Setting(5, description="The maximum memory we can use")
print s + 5 # 10
print s.description # The maximum memory we can use
但后来,我想这对所有对象的工作,这样我就可以有一个类。这样我可以使对象的行为与底层的value
对象的行为完全相同,但只是具有其他description
属性。
我试图改变以上:
class Setting(object):
def __init__(self, value, description=None):
type(value).__init__(value)
self.description = description
s = Setting(5)
print s + 5
print s.description
但现在我得到的错误:
Traceback (most recent call last):
File "test.py", line 8, in <module>
print s + 5
TypeError: unsupported operand type(s) for +: 'Setting' and 'int'
,如果我看dir(self)
,它似乎并没有已经运行了初始化剂value
。
可以做到这一点吗?
我知道我可以为不同的类型创建几个不同的类,但我宁愿只有一个类而只是通用。
(是的,我意识到如果对象有一个description
属性它会被覆盖,我打算使用它仅用于基元,这是首先它是一个问题的原因之一,因为我不能只是添加属性。)
也许你可以使用一个'descriptions'字典,其键是原始实例,其值是描述每个实例的字符串。 – Kevin
因为您没有使用传递给方法中任何位置的方法的值参数,所以可以实现'__add__'方法并相应地返回值。 – ZdaR
这是您的问题的准确解释吗? '我想创建一个接受两个输入的类,一个是任何标准数值类型(int,float,long等)的数字对象,另一个是文本。创建的对象应具有作为第一个参数输入的数值类型的所有方法和行为,以及支持返回第二个输入值的属性引用'.description'。这是可能的,如果是的话,怎么样?“ – zehnpaard