本问题已经有最佳答案,请猛点这里访问。
我看了一个youtube视频解释@classmethods、实例方法和@staticmethods。我知道如何使用它们。我只是不知道什么时候用,为什么用。这是他在youtube视频中给我们的@classmethods代码。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | class Employee: # class object attributes num_of_emps = 0 raise_amt = 1.04 def __init__(self, first, last, pay): self.first = first self.last = last self.email = first + '.' + last + '@email.com' self.pay = pay Employee.num_of_emps += 1 def fullname(self): return f'{self.first} {self.last}' def apply_raise(self): self.pay = int(self.pay * self.raise_amt) @classmethod def set_raise_amt(cls, amount): cls.raise_amt = amount @classmethod def from_string(cls, emp_str): first, last, pay = emp_str.split('-') return cls(first, last, pay) emp_1 = Employee('Corey', 'Shaffer', 50000) emp_2 = Employee('Test', 'Employee', 60000) emp_3 = Employee.from_string('Ezekiel-Wootton-60000') print(emp_3.email) print(emp_3.pay) |
为什么要为from_string方法使用@classmethod ?我认为使用没有修饰符的普通实例方法更有意义,因为我们没有引用类。对吗? ! ?我们引用每个实例,其中字符串作为参数传递。
在
1 | new_employee = Employee.from_string('Corey-Shaffner-50000') |
想想看,如果我想用这个方法构造我的第一个
在
1 | Employee.raise_amt = x |