以下代碼應該Employee從員工字串生成一個實體,但似乎不起作用。未創建實體。我如何使它作業?
class Employee:
def __init__(self,first,last,pay):
self.first=first
self.last=last
self.pay=pay
def pay_increase(self):
self.pay = (self.pay * 0.1)
def emp_str(self,emp_str):
first , last , pay = emp_str.split('-')
emp1=Employee('reza','azaf',2000)
emp1.pay_increase()
emp2_str= 'rezd-454-454'
emp2 = Employee.emp_str(emp2_str)
print(emp2.first)
uj5u.com熱心網友回復:
emp_str需要是 aclassmethod并回傳新創建的類,如下所示:
@classmethod
def emp_str(cls,emp_str):
first , last , pay = emp_str.split('-')
return cls(first,last,pay)
根據您的要求,沒有類方法:
def emp_str(emp_str):
first , last , pay = emp_str.split('-')
return Employee(first, last, pay)
確保它在課堂之外。
uj5u.com熱心網友回復:
您希望emp_str回傳 na emp2,但它什么也不回傳。添加:
return Employee(first, last, pay)
另一個問題,你呼叫emp_str類,所以它應該是一個靜態方法。
uj5u.com熱心網友回復:
試試這個:
class Employee:
def __init__(self, first=None, last=None, pay=None):
self.first = first
self.last = last
self.pay = pay
def pay_increase(self):
self.pay = (self.pay * 0.1)
def emp_str(self,emp_str):
first, last, pay = emp_str.split('-')
self.first = first
emp1 = Employee(first='reza',last='azaf',pay=2000)
emp1.pay_increase()
emp2_str = 'rezd-454-454'
emp2 = Employee()
emp2.emp_str(emp2_str)
print(emp2.first)
uj5u.com熱心網友回復:
我不太確定您想要什么,但在我看來,emp_str鑒于您的示例和標簽,您希望自己成為替代建構式。
為此,我們使用classmethod裝飾器并相應地構建方法
class Employee:
def __init__(self,first,last,pay):
self.first=first
self.last=last
self.pay=pay
def pay_increase(self):
self.pay = (self.pay * 0.1)
@classmethod
def emp_str(cls,emp_str):
first , last , pay = emp_str.split('-')
return cls(first , last , int(pay))
def __str__(self):#lets also add a way to nicely print this object
return f"{type(self).__name__}({self.first!r}, {self.last!r}, {self.pay!r})"
現在快速測驗一下
>>> emp1=Employee('reza','azaf',2000)
>>> print(emp1)
Employee('reza', 'azaf', 2000)
>>> emp1.pay_increase()
>>> print(emp1)
Employee('reza', 'azaf', 2200.0)
>>> emp2_str= 'rezd-454-454'
>>> emp2 = Employee.emp_str(emp2_str)
>>> print(emp2)
Employee('rezd', '454', 454)
>>> print(emp2.first)
rezd
>>>
uj5u.com熱心網友回復:
您emp_str不能有 self 引數(因為它還沒有物件的實體)但它應該回傳一個用常規 init 生成的新實體:
def emp_str(emp_str):
first , last , pay = emp_str.split('-')
return Employee(first,last,float(pay))
這不是一個類方法,因此當它用于 Employee 的任何子類時,它將回傳一個 Employee 實體而不是子類的實體。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/395740.html
