Ich versuche, das Konzept der Delegation in Python zu verstehen, indem Sie die Funktionen getattr und setattr verwenden. Grundidee ist, zunächst den Wert des Attributs 'lang' in der Person-Klasse durch die Klasse Professional zu setzen und dann dasselbe zu erhalten. Das Problem ist, dass das Ergebnis eine Endlosschleife ist.__setattr__ Funktion in Python
class Person:
def __init__(self,name='Subhayan',job='Engineer',unique='Unique'):
print ("Inside init function of Person")
self.name = name
self.job = job
self.salary = 50000
self.lang = "Perl"
def __setattr__(self,att,value):
self.__dict__[att] = value
class Professional:
job = 'Engineer'
salary = 75000
def __init__(self):
print ("Inside Professional init function")
self.person = Person()
def __getattr__(self,attr):
print ("Calling the getattr function")
return getattr(self.person, attr)
def __setattr__(self,att,value):
# print ("calling the setattr function setting the value of %s to %s" %(attr,value))
self.person.__setattr__(self,att,value)
if __name__ == '__main__':
print ("Calling the script as main")
Prof = Professional()
print ("Salary is",Prof.salary)
print ("name is",Prof.__class__)
print ("Setting the value of lang")
Prof.lang = 'Python'
value = Prof.lang
print ("The value of lang is ;",value)
Ok, so in diesem Fall ich nicht ein Objekt der Person aus dem Innern der __init__ Methode of Professional –
initialisieren kann @ SubhayanBattacharya: Sicher kannst du. Warum denkst du, kannst du nicht? – BrenBarn
Ich dachte daran, den Aufruf zu ersetzen: self.person = Person() mit etwas wie: self .__ dict __ ['person'] = Person(). Dies sollte keine Anrufe an __setattr__ weiterleiten. Hab ich recht ? –