您当前的位置: 首页 >  Python

Peter_Gao_

暂无认证

  • 0浏览

    0关注

    621博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Python的类成员函数、静态函数和成员的函数的比较

Peter_Gao_ 发布时间:2020-02-22 18:04:55 ,浏览量:0

原创Erick_Lv 最后发布于2019-03-17 20:06:11 阅读数 1104  收藏 展开 从声明方式来看: 普通成员函数是最一般的方法,即

class Foo:     def plain_func():         pass 1 2 3 类成员函数是

class Foo:     @classmethod     def class_func():         pass 1 2 3 4 静态函数是

class Foo:     @staticmethod     def static_func():         pass 1 2 3 4 从调用方式来看,普通函数与后两者区别较大,普通函数只能在类的实例中被调用,而后两者可以通过类名进行调用:

class Foo:     def plain_func(self):         print("plain_func")

    @classmethod     def class_func(cls):         print("class_func")

    @staticmethod     def static_func():         print("static_func")

# 必须实例化进行调用 foo = Foo() foo.plain_func() # 通过类名进行调用 Foo.class_func() Foo.static_func() 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 而后类方法和静态的方法最核心的区别就在于类方法有cls参数,而静态方法没有cls参数。cls可以理解为this指针,它引用了一个类实例。

来自知乎这个回答关于类方法的总结:

方法可以判断出自己是通过基类被调用,还是通过某个子类被调用 通过子类调用时,方法可以返回子类的实例而非基类的实例 通过子类调用时,方法可以调用子类的其他classmethod 一般来说classmethod可以完全替代staticmethod。staticmethod唯一的好处是调用时它返回的是一个真正的函数,而且每次调用时返回同一个实例(classmethod则会对基类和子类返回不同的bound method实例),但这点几乎从来没有什么时候是有用的。不过,staticmethod可以在子类上被重写为classmethod,反之亦然,因此也没有必要提前将staticmethod全部改为classmethod,按需要使用即可。 ———————————————— 版权声明:本文为CSDN博主「Erick_Lv」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/qq_35976351/article/details/88625427

关注
打赏
1664521772
查看更多评论
立即登录/注册

微信扫码登录

0.0408s