【发布时间】:2012-09-06 21:34:20
【问题描述】:
我正在尝试创建一个返回值而不是自身的类。
我将向您展示一个与列表进行比较的示例:
>>> l = list()
>>> print(l)
[]
>>> class MyClass:
>>> pass
>>> mc = MyClass()
>>> print mc
<__main__.MyClass instance at 0x02892508>
我需要 MyClass 返回一个列表,就像 list() 一样,而不是实例信息。我知道我可以创建列表的子类。但是有没有办法在没有子类的情况下做到这一点?
我想模仿一个列表(或其他对象):
>>> l1 = list()
>>> l2 = list()
>>> l1
[]
>>> l2
[]
>>> l1 == l2
True
>>> class MyClass():
def __repr__(self):
return '[]'
>>> m1 = MyClass()
>>> m2 = MyClass()
>>> m1
[]
>>> m2
[]
>>> m1 == m2
False
为什么m1 == m2 是假的?这就是问题。
如果我没有回复你们所有人,我很抱歉。我正在尝试你给我的所有解决方案。我不能使用def,因为我需要使用setitem、getitem等函数。
【问题讨论】:
-
如果你想让构造函数
MyClass()返回一个列表,你应该使用一个函数,而不是一个类。你的意思是当你打印它时你想让它显示为一个列表吗? -
如果你想拥有一个具有列表属性的类,那么这就是子类化的目的。为什么不想从
list继承? -
另外,构造没有返回“信息”,信息是对象打印时的样子。
mc是类MyClass的一个实例。 -
也许您想重新实现
__repr__或__str__方法,以便您的类实例在交互模式下评估时类似于列表? -
在不深入细节的情况下,类与函数不同,并且本身不返回值。