下一个是我的代码:为什么getattr()不能像我认为的那样工作?我认为此代码应打印“SSS”
class foo:
def __init__(self):
self.a = "a"
def __getattr__(self,x,defalut):
if x in self:
return x
else:return defalut
a=foo()
print getattr(a,'b','sss')
我知道__getattr__
必须是2的说法,但我想获得一个默认属性,如果属性是不存在。
我怎样才能得到它,谢谢
和
,我发现如果定义__setattr__
,我的下一个代码也不能运行
class foo:
def __init__(self):
self.a={}
def __setattr__(self,name,value):
self.a[name]=value
a=foo()#error ,why
喜亚历克斯, 我改变了你的例子:
class foo(object):
def __init__(self):
self.a = {'a': 'boh'}
def __getattr__(self, x):
if x in self.a:
return self.a[x]
raise AttributeError
a=foo()
print getattr(a,'a','sss')
它打印{“一”:“嘘”},而不是“嘘” 我认为这将打印self.a不self.a [“一”],这显然不希望看到
为什么,有什么办法来避免它
Downvoted不听的答案。 – 2009-12-27 13:14:47
@zjm,不,没有办法让'getattr(self,'a',whatever)'**避免**获得'self.a'的时候,当然这也不是很明显,为什么一个人想要。你为什么不重新命名属性,对'self .__ a'说,如果你想从外面隐藏它? – 2009-12-27 15:31:14