通常情况下,在类中定义的方法默认都是实例方法。类的构造方法理论上也属于实例方法,只不过比较特殊。
class Person:
def __init__(self):
self.name = "xiaobai"
self.age = 10
def say(self):
print("正在调用say()实例方法")
#1. 类对象调用实例方法
lilei = Person()
lilei.say()
#执行结果
正在调用say()实例方法
#2. 类名调用实例方法,此方式需要手动给self参数传值
mary = Person()
Person.say(mary)
#执行结果
正在调用say()实例方法
python类方法和实例方法相似,它最少也包含一个参数,只不过类方法中通常将其命名为cls,python会自动将类本身绑定给cls参数。也就是说,我们在调用类方法时,无需显式为cls参数传参。
class Person:
def __init__(self):
self.name = "xiaobai"
self.age = 10
@classmethod
def say(cls):
print("正在调用类方法", cls)
#1. 使用类名调用类方法
Person.say()
#执行结果
正在调用类方法 <class '__main__.Person'>
#2. 使用类对象调用类方法(不推荐)
lilei = Person()
lilei.say()
#执行结果
正在调用类方法 <class '__main__.Person'>
静态方法没有类似self和cls这样的特殊参数,因此python解释器不会对它包含的参数做任何类或对象的绑定。也正因为如此,类的静态方法中无法调用任何类属性和类方法。
class Person:
@staticmethod
def say(name, age):
print("我的名字是", name, "我今年", age, "岁")
#1. 使用类名调用静态方法
Person.say("lilei", 10)
#2. 使用类对象调用静态方法
mary = Person()
mary.say("mary", 9)
#执行结果
我的名字是 lilei 我今年 10 岁
我的名字是 mary 我今年 9 岁
在实际编程中,几乎不会用到类方法和静态方法,因为我们完全可以使用函数代替它们实现想要的功能,但在一些特殊的场景中(例如工厂模式),使用类方法和静态方法也是很不错的选择。
原文:https://www.cnblogs.com/xiaobaizzz/p/12218653.html