私はPython 2.6で "new style"クラスを使用していますが、サブクラスで__getattr__に問題があります。python __getattr__と__name__
サブクラスは、このような...
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
実際の呼び出しコードとトレースバックを表示できますか? – bgporter
前のコメントに同意すると、あなたの情報はあまり詳しくはっきりしていないので、回答を書くときに混乱するかもしれません。しかし、あなたの__getattr__と__getattribute__の理解によれば、[this post](http://stackoverflow.com/questions/3278077/difference-between-getattr-vs-getattribute-in-python)はあなたにとって役に立つようです。 – Reorx
は別の簡単な例を追加しました –