我对Python比较陌生,我想知道你如何能够"配置"一个类,如果你打印它就会返回一个元组。
示例:我有一个属性为a,b&的类。 C:
class Foo:
def __init__(self):
self.a = 3
self.b = 4
self.c = 5
现在我如何"配置"我可以通过以下方式访问这些属性:
>>> bar = Foo()
>>> print bar
<foo(3, 4, 5)>
>>> print bar[1]
4
我知道__repr__()
和__str__()
,但如果我尝试通过&#34; []&#34;来访问号码,则会出现以下错误:
AttributeError: Foo instance has no attribute '__getitem__'
我知道有可能以某种方式,例如pygame
库有一个名为Rect
的对象,它完全按照上面的方式工作。
谢谢!
答案 0 :(得分:1)
这里有两个完全不同的问题。如果您将值设置为self.a
,则需要将其作为self.a
访问,而不是使用[]
。让你的__str__
做类似的事情:
return '<foo({0}, {1}, {2})>'.format(self.a, self.b, self.c)
如果您希望能够使用[]
访问这些变量,则需要按照Stefano Sanfilippo的回答和the documentation中的说明定义__getitem__
。
答案 1 :(得分:0)
正如AttributeError
所说,您需要为您的班级定义__getitem__
方法:
class Foo:
def __init__(self):
self.a = 3
self.b = 4
self.c = 5
def __getitem__(self, index):
if index == 0:
return self.a
elif index == 1:
return self.b
elif index == 2:
return self.c
else:
raise KeyError("Index must be 0, 1 or 2")
丑陋,但有效:
>>>bar = Foo()
>>>print bar
<__main__.Foo instance at xxxxxxxxxxxx>
>>>print bar[1]
4
如果您不需要a
,b
和c
作为单独的变量,则可以使用:
class Foo:
def __init__(self):
self.elements = [3, 4, 5]
def __getitem__(self, index):
return self.elements[index]
虽然在这种情况下,我会考虑直接使用list
...
答案 2 :(得分:0)
不确定这是否正是您想要的。将值设置为self.a将使用print bar.a
进行访问。但是,稍微解决方法,当您设置所有自我值时,将形成一个字典。您可以通过从所有自身属性中提取值来获取数组。
>>> bar = Foo()
>>> print bar
<foo(3, 4, 5)>
>>> bar.__dict__
{'a': 3, 'b': 4, 'c': 5}
>>> bar.__dict__.values()
[3,4,5]