python-3.x - 在 Python OOP 实现类中需要帮助
问题描述
我需要这里的每个人都建议指导我,我正在尝试 Python OOP 中的一个类,这是我下面的代码。我已经导入 abstractmethod 但不确定为什么下面有错误。我不明白如何解决这个问题。任何人都可以帮助我吗?
from abc import ABC, abstractmethod
class Employee(ABC):
def __init__(self, employeeId, name, workFromHome, leaveBalance = 0):
self._employeeId = employeeId
self._name = name
self._workFromHome = workFromHome
self._leaveBalance = leaveBalance
@property
def employeeId(self):
return self._employeeId
@property
def name(self):
return self._name
@property
def workFromHome(self):
return self._workFromHome
@workFromHome.setter
def workFromHome(self, atHome):
self._workFromHome = atHome
@abstractmethod
def getLeaveEntitlement(self):
pass
#Other Methods
def adjustLeave(self, adjustment):
self._leaveBalance += adjustment
def __str__(self):
return f'ID {self._employeeId} Name: {self._name} Leave Balance: {self._leaveBalance} WFH: {self._workFromHome}'
def main():
e1 = Employee('101', 'Jeff', 20, 'Yes')
print(e1)
main()
遇到的错误:
40 41 ---> 42 main() 中的 TypeError Traceback (最近一次调用最后一次)
在 main() 36 def main(): 37 ---> 38 e1 = Employee('101', 'Jeff', 20, 'Yes') 39 print(e1) 40
TypeError:无法使用抽象方法 getLeaveEntitlement 实例化抽象类 Employee
如果工作这是结果: ID:101 姓名:Jeff Leave 余额:20 WFH:否
解决方案
由于 Employee 是一个 ABC,你不能直接实例化它。只有 1) 继承自它和 2) 实现其抽象方法的类才允许被实例化。您的代码没有任何“错误”,这是一个设计约束。
以下代码添加了EmployeeChildClass
继承自Employee
并按您预期工作的代码:
from abc import ABC, abstractmethod
class Employee(ABC):
def __init__(self, employeeId, name, workFromHome, leaveBalance = 0):
self._employeeId = employeeId
self._name = name
self._workFromHome = workFromHome
self._leaveBalance = leaveBalance
@property
def employeeId(self):
return self._employeeId
@property
def name(self):
return self._name
@property
def workFromHome(self):
return self._workFromHome
@workFromHome.setter
def workFromHome(self, atHome):
self._workFromHome = atHome
@abstractmethod
def getLeaveEntitlement(self):
pass
#Other Methods
def adjustLeave(self, adjustment):
self._leaveBalance += adjustment
def __str__(self):
return f'ID {self._employeeId} Name: {self._name} Leave Balance: {self._leaveBalance} WFH: {self._workFromHome}'
# Dummy implementation
class EmployeeChildClass(Employee):
def getLeaveEntitlement(self):
return None
def main():
e1 = EmployeeChildClass('101', 'Jeff', 20, 'Yes')
print(e1)
main()
推荐阅读
- javascript - 是否可以在 Yup 中定义何时在现场进行验证?
- parsing - 使用害虫时如何修复枚举的缺失文档?
- scala - 以功能方式使用 Option 来避免 if-else
- java - 查询 DynamoDB 表中包含特定字符串的表
- python - 排序方法返回不正确的输出
- javascript - 重定向到某些 div 中的 url
- java - 如何重置表单Java Spring
- python - 如何为完成的 MLflow 运行添加更多指标?
- r - 当多个逻辑向量为真时,是否有 R 函数来创建变量?
- xcode - 我的应用程序未显示在 testflight 中,但在 xcode 中一切都成功