Python 为什么要使用类方法而不是仅使用类名称作为实例?
我有个问题。我正在观看课堂教程和跨课堂方法的cam。看了代码后,我的问题可以更好地理解。我将首先显示代码 守则:Python 为什么要使用类方法而不是仅使用类名称作为实例?,python,python-3.x,class,class-method,Python,Python 3.x,Class,Class Method,我有个问题。我正在观看课堂教程和跨课堂方法的cam。看了代码后,我的问题可以更好地理解。我将首先显示代码 守则: class Person: def __init__(self, firstname, lastname): self.firstname = firstname self.lastname = lastname self.from_lastname() def from_lastname(self):
class Person:
def __init__(self, firstname, lastname):
self.firstname = firstname
self.lastname = lastname
self.from_lastname()
def from_lastname(self):
Person.mostpreviouslastname = self.lastname
p1 = Person('Mike', 'Wizoski')
print(Person.mostpreviouslastname)
print(p1.lastname)
p2 = Person ('Indiana', 'Jones')
print(p1.lastname)
print(p2.lastname)
print(Person.mostpreviouslastname)
这是没有类方法的部分。
这与:
class Person:
def __init__(self, firstname, lastname):
self.firstname = firstname
self.lastname = lastname
Person.from_lastname(self.lastname)
@classmethod
def from_lastname(cls, last_name1):
cls.mostpreviouslastname = last_name1
p1 = Person('Mike', 'Wizoski')
print(Person.mostpreviouslastname)
print(p1.lastname)
p2 = Person ('Indiana', 'Jones')
print(p1.lastname)
print(p2.lastname)
print(Person.mostpreviouslastname)
他们两个工作一样。所以,我的问题是,为什么甚至使用类方法?在Python中,< P/> < P>类方法在考虑继承时更有意义。让我们使用一个稍微更具启发性的例子: 假设您有一个类
Item
,它表示杂货店中的一种商品。我们还可以说,所有物品都可以装在两个包装中。我们将用一个返回元组的classmethod来表示它
class Item:
@classmethod
def two_pack(cls):
return cls(), cls()
现在让我们假设您想要子类化Item
来真正表示特定的项目,比如Soda
class Soda(Item):
pass
现在我们可以调用Soda.two\u pack()
并获得Soda
对象的元组,即使two\u pack
方法根本不知道Soda
对象
这也涉及了类方法的主要用途,它提供了构建对象的替代方法,因此,在考虑继承时,Python中的类方法在<代码> >让我们使用一个稍微更具启发性的例子:
假设您有一个类Item
,它表示杂货店中的一种商品。我们还可以说,所有物品都可以装在两个包装中。我们将用一个返回元组的classmethod来表示它
class Item:
@classmethod
def two_pack(cls):
return cls(), cls()
现在让我们假设您想要子类化Item
来真正表示特定的项目,比如Soda
class Soda(Item):
pass
现在我们可以调用Soda.two\u pack()
并获得Soda
对象的元组,即使two\u pack
方法根本不知道Soda
对象
这还涉及到类方法的主要用途,它提供了构建对象的替代方法,因此您不局限于\uuuu init\uuuu
在您的示例中,您可能不想使用类方法。这是因为fullname
只能有一个值,它附加到Person
类对象。因此,如果您曾经有多个Person
实例,那么它们就不能有单独的fullname
值
在您的情况下,您希望删除class方法,并从\u fullname
referenceself
中删除,以便每个人的名字都不同
实例:
class Person:
def __init__(self, firstname, lastname):
self.firstname = firstname
self.lastname = lastname
self.from_fullname()
def from_fullname(self):
self.fullname = self.lastname
p1 = Person('Mike', 'Wizoski')
p2 = Person('Bob', 'Jones')
print(p1.fullname)
print(p2.fullname)
# Wizoski
# Jones
如果您坚持使用其中一个示例,则在实例化多个人时会得到错误的结果:
# Jones
# Jones
那么什么时候使用类方法呢?当您有一些不使用任何实例数据的函数时(即不需要self
引用)。更详细的解释可以在这里找到:
在您的示例中,您可能不想使用类方法。这是因为fullname
只能有一个值,它附加到Person
类对象。因此,如果您曾经有多个Person
实例,那么它们就不能有单独的fullname
值
在您的情况下,您希望删除class方法,并从\u fullname
referenceself
中删除,以便每个人的名字都不同
实例:
class Person:
def __init__(self, firstname, lastname):
self.firstname = firstname
self.lastname = lastname
self.from_fullname()
def from_fullname(self):
self.fullname = self.lastname
p1 = Person('Mike', 'Wizoski')
p2 = Person('Bob', 'Jones')
print(p1.fullname)
print(p2.fullname)
# Wizoski
# Jones
如果您坚持使用其中一个示例,则在实例化多个人时会得到错误的结果:
# Jones
# Jones
那么什么时候使用类方法呢?当您有一些不使用任何实例数据的函数时(即不需要self
引用)。更详细的解释可以在这里找到:
方法想对类的实例做一些事情,classmethod想对类本身做一些事情(例如使用它来创建实例)方法想对类的实例做一些事情,classmethod想对类本身做一些事情(例如使用它来创建实例)这不是我想要的。我把问题改了一点,使它更容易理解。不过这不是我想要的。我把问题改了一点,使它更容易理解。不过是Thx。