我试图通过简单地调用对象本身来解决如何让python对象返回默认值的问题。基本上,这相当于其他语言通用的类“default member”(我记得在VB时代就使用过它)。你知道吗
例如,假设我创建了一个扩展基本Python元组的SuperTuple()
类。如果我不带参数调用对象,我希望它返回Python元组,而不是字符串表示(如__repr__()
)。你知道吗
如果我的基础课看起来像:
class SuperTuple():
_tuple = ()
def __init__(self, tuple):
_tuple = tuple
我想要以下行为:
>>> a = SuperTuple((1,2,3))
>>> a._tuple
(1, 2, 3)
>>> a
(1, 2, 3)
我怀疑在Python中,没有一种方法可以不随意创建一些需要显式调用的“default”类成员,这在某种程度上违背了这个目的。你知道吗
当然,它的优点是能够在其他操作中使用它,而不必处理操作符过载和其他相关问题:
>>> a = Supertuple(1, 2, 3)
>>> b = a + (4, 5, 6)
>>> b
(1, 2, 3, 4, 5, 6)
>>> type(a)
<class 'SuperTuple'>
>>> type(b)
<class 'tuple'>
您只需从
tuple
继承即可,它保留了所有所需的行为。如果您想添加一个属性,就不能在__init__
中添加,因为实例已经存在,并且是不可变的!因此,您必须重写__new__
,它实际上创建了实例:Python没有像VB或其他语言那样的“default属性”。你知道吗
看起来您想使
SuperTuple
成为tuple
的后代,这样对象本身就是tuple的扩展:它将继承元组的所有行为,包括以默认值启动元组:
编辑:您可以覆盖其他魔术方法以包含所需的行为,例如:
相关问题 更多 >
编程相关推荐