python - 从组件类访问复合类字段
问题描述
我有两个类'Employee'(复合类)和'Salary'(组件类)。
我想在“Salary”类中获取名为“self.abc”(在 Employee 类中定义)的变量的值。我怎么能得到那个?
目前我收到一个错误AttributeError: 'Salary' object has no attribute 'abc'
。请帮忙。
我不想在这里使用继承方法。
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
对象作为参数传递给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.obj_salary.pay
如果是,将不会被更新obj_emp.pay
,在下面的代码中的含义:
obj_emp = Employee(600, 500)
obj_emp.pay = 700
print(obj_emp.obj_salary.pay)
最后一条print
语句将打印 600,而不是 700。
如果您确实需要在pay
内动态引用Salary
,则始终可以使用self.parent.pay
而不是self.pay
; 这将引用连接Employee
对象的pay
值。
推荐阅读
- google-apps-script - 性别化名称 API,达到请求限制 - 无法让谷歌表格自定义功能工作
- javascript - Quasar cordova-plugin-device - 错误“设备”未定义
- html - 如何删除顶部的白条?
- zend-framework - 如何从另一个模块提供服务?
- c# - 如何将信息从视图传递到控制器作为参数
- angular - 如何将 ngFor 用于集合中的数组
- python - 设置 Python KafkaProducer sasl 机制属性
- r - R中lm()回归的summary()中的“剩余标准误差”是什么意思?
- android - 我可以在特定时间暂时停止通过我的应用打开其他应用吗?
- asp.net - 将旧的 VB.NET 项目从 VS2013 迁移到 VS2017