python类中静态方法TypeError: static_test() missing 1 required positional argument: 'self'

初次了解python里的__dict__属性,看到这篇博客里的这段代码:
(已经将部分python2语法改为python3语法了)

class A(object):
    """
    Class A.
    """

    a = 0
    b = 1

    def __init__(self):
        self.a = 2
        self.b = 3

    def test(self):
        print('a normal func.')

    @staticmethod
    def static_test(self):
        print('a static func.')

    @classmethod
    def class_test(self):
        print('a class func.')


obj = A()
print(A.__dict__)
print(obj.__dict__)

因为python里的静态方法和类方法也是第一次使用,所以各种仔细研究,发现调用静态方法时一直报错:
TypeError: static_test() missing 1 required positional argument: ‘self’
最后才知道了静态方法不需要self参数,直接去掉self参数就好,估计这是静态方法一个特殊的地方;
然而类方法的self参数不可以去掉,去掉则会报错。
对于这个错误不知道是不是python2和python3的差异引起的,个人提醒大家得注意一下这个问题哦!

另外,只有标记了@staticmethod的方法才是静态方法,只有标记了@classmethod的方法才是类方法
改进代码如下:

class A(object):
    """
    Class A.
    """

    a = 0
    b = 1

    def __init__(self):
        self.a = 2
        self.b = 3

    def test(self):
        print('a normal func.')

    @staticmethod
    def static_test():
        print('a static func.')

    @classmethod
    def class_test(self):
        print('a class func.')


obj = A()
print(A.__dict__)
print(obj.__dict__)
#通过类对象调用函数:
obj.test()
obj.static_test()  #或通过类名来调用:A.static_test()
obj.class_test()

至于这几种函数的具体用法是什么样的,我打算之后再去研究,目前先把它们的基本定义形式和调用方法了解清楚。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值