ein Buch liest __getattr__ zu helfen, ich kam in diesem Code ...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)
Es tut, was ich will, zu tun, aber ich verstehe nicht, die __getattr__
Funktion in der Manager
Klasse. Ich weiß, dass es alle anderen Attribute von Person
Klasse delegiert. aber ich verstehe nicht, wie es funktioniert. zum Beispiel warum von Person
Klasse? wie ich es nicht ausdrücklich sage. Person (Modul ist anders als Person (Klasse)
Jede Hilfe sehr geschätzt :)
Mmh entweder der Code ist alt oder schlecht oder ich sehe den Trick dahinter nicht. Aber ich würde nur die 'Manager' Klasse von' Person' erben lassen.Aber ich verstehe deine Frage nicht wirklich. Sie sagen, Sie wissen, was getattr macht. Warum er an "self.person" delegiert: Ich habe diesen Code nicht geschrieben, daher kann ich nur annehmen, dass ein "Manager" eine "Person" ist. Im Konstruktor wird eine neue "Person" erstellt. –
Es ist wirklich alter Code: Es wird nicht von "Objekt" abgeleitet, also sind sie Klassen im alten Stil. Oh, und es ist kaputt: 'Person.lastName' gibt nicht die richtige Antwort für jemanden mit dem Nachnamen" de la Garza "zurück. –
Welches Buch liest du? Das sieht schlecht geschrieben imho ... – ChristopheD