Python 中的类方法
类充当用于创建对象的预定义结构或蓝图。
我们可以在 Python 中为一个类提供不同的属性和方法。Python 使我们能够为类定义各种方法。
首先,我们有可以访问所有类属性并通过类实例访问的实例方法。我们还有一个类的类方法和静态方法。
本教程将演示 Python 中的类方法。
可以在没有任何类实例的情况下调用类方法。这些方法可以访问类的状态。
他们可以访问类的字段和属性,并获取类本身的参数,而不是实例。
此参数包含类对象,而不是给定类的实例。我们可以使用内置的 classmethod()
函数或 @classmethod
装饰器在 Python 中创建类方法。
在 Python 中使用 classmethod()
函数创建类方法
classmethod()
函数接受必须转换为类方法的函数。我们可以在类中定义一个函数,然后将其转换为类方法。
例如:
class Emp:
dept = 'python'
def dept_name(obj):
print("Department: ", obj.dept)
Emp.dept_name = classmethod(Emp.dept_name)
Emp.dept_name()
输出:
Department: python
在上面的示例中,我们使用 classmethod()
函数将 Emp
类的 dept_name()
函数转换为类方法。我们使用类名访问这个函数。
然而,这种方法被认为是过时的和非 Pythonic 的。 @classmethod
装饰器在最新版本的 Python 中是首选。
我们在下面讨论这种方法。
在 Python 中使用 @classmethod
装饰器创建类方法
@classmethod
装饰器可以放在函数之前以在 Python 中返回类方法。这个装饰器在函数定义之后被评估。
使用这种方法,我们需要向函数提供 cls
参数作为强制。它表明类方法是指类本身而不是任何实例。
我们将把这个方法与前面例子中的函数一起使用。
class Emp:
dept = 'python'
@classmethod
def dept_name(obj):
print("Department: ", obj.dept)
Emp.dept_name()
输出:
Department: python
应该记住,类方法应用于所有类实例的属性。这些方法将被子类继承。
我们可以使用类方法在 Python 中实现重载功能。
请参阅以下示例。
class Emp(object):
def __init__(self, name = 'Na', age = 10):
self.name = name
self.age = age
@classmethod
def from_str(cls, sample):
name, age = sample.split(',')
e1 = cls(name, age)
return e1
e1 = Emp.from_str('Matt,15')
print(e1.name,e1.age)
输出:
Matt 15
类方法使用上面示例中的 cls
对象返回一个 Emp
类对象。我们通过拆分字符串创建了这个类的一个对象。
静态方法类似于类方法。我们可以像访问类方法一样访问静态方法,而无需创建类实例。
但是,静态函数无法访问类状态,也无法修改它。没有类属性可以访问该方法,也不能被任何类方法调用。
Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.
LinkedIn