一个类可以通过其-uu str_uu方法充当字符串,也可以通过其调用方法充当函数。它能充当,比如说,一个列表,或者一个元组吗?在
class A (object):
def __???__ (self):
return (1, 2, 3)
>>> a = A()
>>> a * 3
(1, 2, 3, 1, 2, 3, 1, 2, 3)
编辑…
这里有一个更好的例子来帮助澄清上述问题。在
^{pr2}$基本上,我想要的是类似于不返回字符串,但当我简单地调用指向向量实例的名称时返回一个元组(或列表),但我不想失去实例中其余的功能,如访问其他属性和方法。我也不想使用w.vector.vec
来获取数据。我希望vector充当w的元组属性,同时仍然能够执行w.vector.whatever()
之类的操作,或者重写{mul},这样我就可以通过w.vector * 5
来缩放向量。可能吗?在
根据您的目标,您可以创建继承自}等内置类的类:
list
或{考虑到你的向量用例,元组的子类化可能会很好地解决这个问题。在
^{pr2}$对于示例中的特定行为(
A*3
给出了A
中数据的三个连接副本),您希望实现__mul__()
运算符。在例如,它们是等效的:
更一般地说,如果你想实现一个序列类型,你必须实现所有的operations defined for sequence types。你必须定义-
A[3]
是什么意思(__getitem__()
,__setitem__()
)A[1:10]
是什么意思(__getslice__()
)for item in A:
是什么意思(__iter__()
)等等。在
以下是在
^{pr2}$list
s上定义的方法的完整列表:当您调用str时,类不充当字符串。它创建并返回一个新的string对象。基本上,当您对一个对象调用
str(something)
时,实际发生的情况是:因此
^{pr2}$str
函数基本上可以认为是这样做的:当您调用
list()
、tuple()
、set()
等时也是如此。如果我认为你的要求是正确的:tuple()
、list()
和set()
都调用类的__iter__()
方法,因此您需要做的是:相关问题 更多 >
编程相关推荐