下一個是我的代碼:爲什麼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