python - 如何在 Python 中使用类属性作为实例属性?
问题描述
我是 Python 编程的新手,我正在编写以下脚本以增加我对 Pyhton OOP 的理解。
# Python OOP
class Employee:
num_of_emps = 0
raise_amt = 1.04
def __init__(self, first_name, last_name, pay):
self.first_name = first_name
self.last_name = last_name
self.pay = pay
self.email = first_name.lower() + '.' + last_name.lower() + '@company.com'
Employee.num_of_emps += 1
def fullname(self):
return self.first + ' ' + self.last
def apply_raise(self):
self.pay = int(self.pay * self.raise_amt)
@classmethod
def from_string(cls, emp_str):
name, surname, pay = emp_str.split('-')
return cls(name, surname, pay)
class Developer(Employee):
raise_amt = 1.01 # overriding raise_amt
def __init__(self, first_name, last_name, pay, prog_lang=None):
super().__init__(first_name, last_name, pay)
self.prog_lang = prog_lang
@classmethod
def with_prog_lang(cls, first_name, last_name, pay, prog_lang):
return cls(first_name, last_name, pay, prog_lang)
@classmethod
def from_string_kebab_case(cls, emp_str):
first_name, last_name, pay, prog_lang = emp_str.split('-')
return cls(first_name, last_name, pay, prog_lang)
class Manager(Employee):
raise_amt = 1.1
supervised_employee = []
def __init__(self, first_name, last_name, pay, employees=None):
super().__init__(first_name, last_name, pay)
if employees is not None:
self.supervised_employee.append(employees)
def add_emp(self, employee):
if employee not in self.supervised_employee:
self.supervised_employee.append(employee)
def remove_emp(self, employee):
if employee in self.supervised_employee:
self.supervised_employee.pop()
def show_employees(self):
if (len(self.supervised_employee) == 0):
print(f"{self.first_name} is managing no one")
else:
print(f"{self.first_name} is managing ", end='')
output = ''
for emp in self.supervised_employee:
output = output + emp + ' ,'
print(f"{output}")
emp1 = Developer('Burak', 'Aksoy', 5000)
manager1 = Manager('Ahmet', 'Nazli', 10000, 'Burak')
manager1.add_emp('John')
manager2 = Manager('Faruk', 'Tuncer', 10000)
print(manager1.supervised_employee)
manager1.show_employees()
manager2.show_employees()
在这里,我在运行代码时有以下输出->
{'first_name': 'Ahmet', 'last_name': 'Nazli', 'pay': 10000, 'email': 'ahmet.nazli@company.com'}
['Burak', 'Harun']
Ahmet is managing Burak ,John ,
Faruk is managing Burak ,John ,
当我将“Burak”和“John”作为员工添加到 manager1 时,我看到 manager2 也受此影响,但我不希望发生这种情况。你认为我可以如何解决这个问题?
任何帮助表示赞赏。
最好的。
解决方案
推荐阅读
- python - 无法使用 `read_html 获取特定表
- java - 如何在java中以编程方式打开具有不同扩展名的文件?
- android - 我的应用程序没有启动,出现以下错误
- c# - 在页面加载时自动发布表单(Razor Pages)
- android - 为什么 android studio 4.2 canary 13 中没有 android 数据库检查器工具?
- ios - UITableView 将一个单元格拖放到另一个单元格上?
- java - 如何在退出框对话框上实现 n 原生广告?
- php - 将 Javascript 对象数组转换并迭代为 PHP 数组
- python - 如何在 Windows 10 的 pyspark 中设置 pypy?
- javascript - 有没有办法让设备的扬声器播放音频