[英]Access Composite class fields from Component class
我有兩個類'Employee'(復合類)和'Salary'(組件類)。
我想在“Salary”class 中獲取名為“self.abc”的變量(在 Employee 類中定義)的值。 我怎么能得到那個?
目前我收到一個錯誤AttributeError: 'Salary' object has no attribute 'abc'
。 請幫忙。
我不想在這里使用 inheritance 方法。
class Employee:
def __init__(self, pay, bonus):
self.abc = 100
self.pay = pay
self.bonus = bonus
self.obj_salary = Salary(self.pay)
self.annual_salary()
def annual_salary(self):
print("Total: " + str(self.obj_salary.get_total() + self.bonus))
class Salary:
def __init__(self, pay):
self.pay = pay
def get_total(self):
print(self.abc) # want to get 'abc' value here from 'Employee' class
return (self.pay*12)
obj_emp = Employee(600, 500)
一種解決方案是將Employee
object 作為參數傳遞給Salary
構造函數,如下所示:
class Employee:
def __init__(self, pay, bonus):
self.abc = 100
self.pay = pay
self.bonus = bonus
self.obj_salary = Salary(self)
self.annual_salary()
def annual_salary(self):
print("Total: " + str(self.obj_salary.get_total() + self.bonus))
class Salary:
def __init__(self, parent):
self.pay = parent.pay
self.parent = parent
def get_total(self):
print(self.parent.abc)
return (self.pay*12)
obj_emp = Employee(600, 500)
請注意,在上面的代碼中,如果obj_emp.pay
是,則obj_emp.obj_salary.pay
不會更新,在以下代碼中的含義:
obj_emp = Employee(600, 500)
obj_emp.pay = 700
print(obj_emp.obj_salary.pay)
最后一個print
語句將打印 600,而不是 700。
如果您確實需要在Salary
中動態引用pay
,您可以始終使用self.parent.pay
而不是self.pay
; 這將引用連接的Employee
對象的pay
值。
您必須在初始化時或之后明確告知Salary
thay 信息。 您可以將abc
值與pay
一起傳遞給初始化程序:
class Salary:
def __init__(self, pay, abc):
self.employee_abc = abc
然后在Employee.__init__
:
self.obj_salary = Salary(self.pay, self.abc)
或為Salary
提供它是其成員的Employee
實例並通過它訪問abc
:
self.obj_salary = Salary(self.pay, self)
第一種方式的好處是您只需要告訴Salary
足夠的信息以使其能夠完成工作,這很好。 您不希望Salary
嚴重依賴於Employee
的設計。
第二種方法的好處是,如果您更改Employee
self.abc
中的 self.abc,它也會自動反映在Salary
中(盡管這也可能被視為不利方面)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.