例如:
class Person :
#类构造方法,也属于实例方法
def __init__(self, name = 'Charlie', age=8):
self.name = name
self.age = age
# 下面定义了一个say实例方法
def say(self, content):
print(content)实例方法**大的特点就是,它**少也要包含一个 self 参数,用于绑定调用此方法的实例对象。实例方法通常会用类对象直接调用,当然也可以用类名调用,例如:
#创建一个类对象
person = Person()
#类对象调用实例方法
person.say("类对象调用实例方法")
#类名调用实例方法,需手动给 self 参数传值
Person.say(person,"类名调用实例方法") 运行结果:
类对象调用实例方法
类名调用实例方法
和 self 一样,cls 参数的命名也不是规定的(可以随意命名),只是 Python 程序员约定俗称的习惯而已。
除此之外,和实例方法**大的不同在于,类方法需要使用@classmethod进行修饰,例如:
class Bird:
# classmethod修饰的方法是类方法
@classmethod
def fly (cls):
print('类方法fly: ', cls) 注意,如果没有 @classmethod,则 Python 解释器会将 fly() 方法认定为实例方法,而不是类方法。类方法推荐使用类名直接调用,当然也可以使用实例对象来调用(不推荐),例如:
# 调用类方法,Bird类会自动绑定到第一个参数 Bird.fly() #① b = Bird() # 使用对象调用fly()类方法,其实依然还是使用类调用, # 因此第一个参数依然被自动绑定到Bird类 b.fly() #②运行结果为:
类方法fly:
类方法fly:
静态方法没有类似 self、cls 这样的特殊参数,因此 Python 解释器不会对它包含的参数做任何类或对象的绑定,也正是因为如此,此方法中无法调用任何类和对象的属性和方法,静态方法其实和类的关系不大。
静态方法需要使用@staticmethod修饰,例如:
class Bird:
# staticmethod修饰的方法是静态方法
@staticmethod
def info (p):
print('静态方法info: ', p)静态方法的调用,既可以使用类名,也可以使用类对象,例如:
#类名直接调用静态方法
Bird.info("类名")
#类对象调用静态方法
b = Bird()
b.info("类对象") 运行结果为:
静态方法info: 类名
静态方法info: 类对象
在使用 Python 编程时,一般不需要使用类方法或静态方法,程序完全可以使用函数来代替类方法或静态方法。但是在特殊的场景(比如使用工厂模式)下,类方法或静态方法也是不错的选择。至于静态方法和类方法的具体应用场景,后续章节用到时再做详细介绍。



