本を読んで役立つ__getattr__、私は...このコードに出くわしたPythonは
# module person.py
class Person:
def __init__(self, name, job=None, pay=0):
self.name = name
self.job = job
self.pay = pay
def lastName(self):
return self.name.split()[-1]
def giveRaise(self, percent):
self.pay = int(self.pay *(1 + percent))
def __str__(self):
return "[Person: %s, %s]" % (self.name,self.pay)
class Manager():
def __init__(self, name, pay):
self.person = Person(name, "mgr", pay)
def giveRaise(self, percent, bonus=.10):
self.person.giveRaise(percent + bonus)
def __getattr__(self, attr):
return getattr(self.person, attr)
def __str__(self):
return str(self.person)
それは、私はそれが何をしたいのかない、しかし、私はManager
クラスで__getattr__
機能を理解していません。私はそれがPerson
クラスの他のすべての属性を委譲することを知っています。私はそれが動作する方法を理解していません。なぜPerson
クラスからですか?私は明示的にそれを伝えていないので。人は(モジュールは、すべてのヘルプは高く評価されて
人(クラス)とは異なります:)実は
コードが古いか悪いか、その背後にあるトリックは表示されません。しかし、 'Manager'クラスに' Person'を継承させるだけです。しかし、私は本当にあなたの質問を理解していません。あなたは 'getattr'がやっていることを知っていると言います。なぜそれが 'self.person'に委譲されたのかについて:私はこのコードを書いていないので、' Manager'が 'Person'だと仮定することができます。コンストラクタでは、新しい 'Person'が作成されます。 –
これは本当に古いコードです: 'object'からサブクラス化されないので、古いスタイルのクラスです。ああ、それは壊れています: 'Person.lastName'は" de la Garza "という姓の人に正解を返しません。 –
あなたはどんな本を読んでいますか?これは、ひどく書かれたimhoを見ています... – ChristopheD