【发布时间】:2012-03-17 15:45:03
【问题描述】:
我在 Python 2.6 中使用“新样式”类,但在子类中使用 __getattr__ 时遇到问题。
如果子类这样实现的话……
def __getattr__(self, name):
if self.__folderDict.has_key(name):
if name == 'created':
return doSomethingSpecial(self.__folderDict[name])
return self.__folderDict[name]
else:
raise AttributeError()
我不清楚为什么我的属性异常被抛出以引用 __name__ ?
我的理解是 __getattr__ 甚至不应该被调用,并且 __name__ 应该由 __getattribute__ 填充,因为我使用的是新样式?
这里有一个更完整的例子...
class Base(object):
@staticmethod
def printMsg(msg, var):
print msg + str(var)
return
def printName(self):
Base.printMsg('#', self.__name__)
return
class Derived(Base):
def __getattr__(self, name):
if self.__testDict.has_key(name):
return self.__testDict[name]
else:
raise AttributeError()
__testDict = {'userid': 4098}
d = Derived()
print d.userid
d.printName()
结果是……
4098
Traceback (most recent call last):
File "D:/.../Scratch/scratch01.py", line 24, in <module>
d.printName()
File "D:/.../Scratch/scratch01.py", line 17, in __getattr__
raise AttributeError()
AttributeError
【问题讨论】:
-
能否显示实际调用代码和回溯?
-
同意前面的评论,您的信息不是很详细和清楚,人们在写答案时可能会感到困惑。但是根据你对getattr和getattribute的理解,this post好像对你有用。
标签: python