Python 简明教程
Python - Class Methods
Methods 从属某个类的对象,用来执行特定的操作。我们可以将 Python 方法分为三种不同的类别:类方法、实例方法和静态方法。
Python class method 是绑定到该类的一种方法,而不是它的实例。它可以在类本身上调用,而不是该类的实例。
许多人常常混淆类方法和静态方法。需要记住的是,虽然这两种方法都是在类上调用的,但是 static methods 无法访问"cls"参数,因此它无法修改类的状态。
不同于类方法, instance method 类的 variables 可以访问对象的实例。此外,它还可以访问类变量,因为其在所有对象中都是通用的。
Creating Class Methods in Python
在 Python 中创建类方法有两种方式:
-
Using classmethod() Function
-
Using @classmethod Decorator
Using classmethod() Function
Python 内置函数 classmethod() 将实例方法转换为 class method ,该方法仅使用类引用来调用,而不用对象。
Example
在 Employee 类中,使用“ self ”参数(对调用对象的引用)定义 showcount() 实例方法。它打印 empCount 的值。接下来,将方法转换为类方法 counter(),该方法可以通过类引用进行访问。
class Employee:
empCount = 0
def __init__(self, name, age):
self.__name = name
self.__age = age
Employee.empCount += 1
def showcount(self):
print (self.empCount)
counter = classmethod(showcount)
e1 = Employee("Bhavana", 24)
e2 = Employee("Rajesh", 26)
e3 = Employee("John", 27)
e1.showcount()
Employee.counter()
Using @classmethod Decorator
使用 @classmethod() 装饰器时,需要定义一个类方法,因为它比先声明一个实例方法,然后再将其转换为类方法更便捷。
Example
类方法作为备用构造器。使用构造新对象所需的参数定义一个 newemployee() 类方法。它返回构造的对象,类似于 init() 方法所做的。
class Employee:
empCount = 0
def __init__(self, name, age):
self.name = name
self.age = age
Employee.empCount += 1
@classmethod
def showcount(cls):
print (cls.empCount)
@classmethod
def newemployee(cls, name, age):
return cls(name, age)
e1 = Employee("Bhavana", 24)
e2 = Employee("Rajesh", 26)
e3 = Employee("John", 27)
e4 = Employee.newemployee("Anil", 21)
Employee.showcount()
现在有四个 Employee 对象。如果我们运行上述程序,则它将显示 Employee 对象的数量:
4
Access Class Attributes in Class Method
类属性是属于类的那些变量,其值是该类所有实例共享的。
若要在类方法中访问类属性,使用 cls 参数,后接点号 (.) 和属性名称。
Dynamically Add Class Method to a Class
Python 的 setattr() 函数用于设置动态属性。如果要向类中添加一个类方法,将该方法名称作为参数值传递给 setattr() 函数。