python class的实例方法,类方法和静态方法小笔记

参考定义:

class A(object):
    X = 1
    
    #实例方法
    def foo(self):
        print("normal func")
    
    #类方法
    @classmethod
    def class_foo(cls):
        print("class func, X = {}".format(cls.X))
    
    #静态方法
    @staticmethod
    def static_foo():
        print("static func, X = {}".format(A.X))
    
class B(A):
    X = 2
    def foo1(self):
        print("normal func1")
    
    #@staticmethod
    #def static_foo():
    #    print("static func, X = {}".format(B.X))

说明:

  • 实例方法直接定义,第一个参数为self,实例方法不能调用类的类属性
  • 类方法用@classmethod装饰,第一个参数为cls
  • 静态方法用@staticmethod装饰,不需要额外参数

 

调用结果:

a = A()
a.foo()        #normal func
A.foo(a)       #normal func
a.class_foo()  #class func, X = 1
A.class_foo()  #class func, X = 1
a.static_foo() #static func, X = 1
A.static_foo() #static func, X = 1

b = B()
b.foo()        #normal func
B.foo(b)       #normal func
b.class_foo()  #class func, X = 2
B.class_foo()  #class func, X = 2
b.static_foo() #static func, X = 1(如果覆盖父类方法,则输出2,貌似显而易见....)
B.static_foo() #static func, X = 1(如果覆盖父类方法,则输出2,貌似显而易见....)

结果说明:

  • 实例方法通常只能用类的实例来调用,但是也可以用类名调用(将类的实例作为参数)
  • 类方法和静态方法都既可以用类名也可以用实例调用
  • 实例方法,类方法和静态方法都可以继承和覆盖,类方法的cls参数会调用继承类的类属性(如果有)

 

参考连接:

https://www.cnblogs.com/flypig258/p/11428500.html

https://www.cnblogs.com/dogecheng/p/11441088.html

https://blog.csdn.net/weixin_39622628/article/details/111459880

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值