1. 类方法:采用@classmethod修饰的方法
  2. 静态方法:采用@staticmethod修饰的方法
  3. 实例方法:不用任何修饰的方法

1. python类实例方法

通常情况下,在类中定义的方法默认都是实例方法。类的构造方法理论上也属于实例方法,只不过比较特殊。

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()实例方法

2. python类方法

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'>

3. python类静态方法

静态方法没有类似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 岁

在实际编程中,几乎不会用到类方法和静态方法,因为我们完全可以使用函数代替它们实现想要的功能,但在一些特殊的场景中(例如工厂模式),使用类方法和静态方法也是很不错的选择。

posted on 2020-01-20 17:03  xiaobaizzZ  阅读(200)  评论(0编辑  收藏  举报