栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

儿童python教程147:Python实例方法、静态方法和类方法详解(包含区别和用法)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

儿童python教程147:Python实例方法、静态方法和类方法详解(包含区别和用法)

和类属性可细分为类属性和实例属性一样,类中的方法也可以有更细致的划分,具体可分为类方法、实例方法和静态方法,本节将详细介绍这 3 种类方法的特点和用法。 Python类实例方法 通常情况下,在类中定义的方法默认都是实例方法。前面章节中,我们已经定义了不只一个实例方法。不仅如此,类的构造方法理论上也属于实例方法,只不过它比较特殊。

例如:

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,"类名调用实例方法")
运行结果:

类对象调用实例方法
类名调用实例方法

有关使用类名直接调用实例方法的更多介绍,可阅读《Python类调用实例方法》一节。 Python类方法 Python 类方法和实例方法相似,它**少也要包含一个参数,只不过,类方法中通常将其命名为 cls,且 Python 会自动将类本身绑定给 cls 参数(而不是类对象)。因此,在调用类方法时,无需显式为 cls 参数传参。

和 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: 

可以看到,不管程序是使用类还是对象调用类方法,Python 都会将类方法的第一个参数绑定到类本身。 Python类静态方法 静态方法,其实就是我们学过的函数,和函数**的区别是,静态方法定义在类这个空间(类命名空间)中,而函数则定义在程序所在的空间(全局命名空间)中。

静态方法没有类似 self、cls 这样的特殊参数,因此 Python 解释器不会对它包含的参数做任何类或对象的绑定,也正是因为如此,此方法中无法调用任何类和对象的属性和方法,静态方法其实和类的关系不大。

静态方法需要使用@staticmethod修饰,例如:

class Bird:

    # staticmethod修饰的方法是静态方法

    @staticmethod

    def info (p):

        print('静态方法info: ', p)

静态方法的调用,既可以使用类名,也可以使用类对象,例如:

#类名直接调用静态方法

Bird.info("类名")

#类对象调用静态方法

b = Bird()

b.info("类对象")
运行结果为:

静态方法info:  类名
静态方法info:  类对象


在使用 Python 编程时,一般不需要使用类方法或静态方法,程序完全可以使用函数来代替类方法或静态方法。但是在特殊的场景(比如使用工厂模式)下,类方法或静态方法也是不错的选择。至于静态方法和类方法的具体应用场景,后续章节用到时再做详细介绍。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/805963.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号