zoukankan      html  css  js  c++  java
  • python实例方法、静态方法和类方法

    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 岁
    

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

  • 相关阅读:
    Median of Two Sorted Arrays
    Two Sum
    C# Socket服务端和客户端互相send和receive
    C++ 虚函数和虚函数表
    C++ 类型转换
    C# 几种退出程序的方式
    进程判断及简单操作
    C#根据函数名称执行对应的函数
    C# DateTime格式化
    nginx常用代理配置
  • 原文地址:https://www.cnblogs.com/xiaobaizzz/p/12218653.html
Copyright © 2011-2022 走看看