【发布时间】:2010-09-07 04:57:11
【问题描述】:
我正在尝试在 Python 中扩展一些“基”类:
class xlist (list):
def len(self):
return len(self)
def add(self, *args):
self.extend(args)
return None
class xint (int):
def add(self, value):
self += value
return self
x = xlist([1,2,3])
print x.len() ## >>> 3 ok
print x ## >>> [1,2,3] ok
x.add (4, 5, 6)
print x ## >>> [1,2,3,4,5,6] ok
x = xint(10)
print x ## >>> 10 ok
x.add (2)
print x ## >>> 10 # Not ok (#1)
print type(x) ## >>> <class '__main__.xint'> ok
x += 5
print type(x) ## >>> <type 'int'> # Not ok (#2)
它在 list 的情况下工作得很好,因为 append 方法“就地”修改了对象,而不返回它。但在 int 的情况下,add 方法不会修改外部 x 变量的值。我想这很好,因为 self 是类的 add 方法中的局部变量,但这阻止我修改分配给实例的初始值班级。
是否可以通过这种方式扩展一个类,或者我应该使用基类型定义一个类属性并将所有需要的方法映射到该属性?
【问题讨论】:
标签: python