用@staticmethod装饰与用@classmethod的区别

本文探讨了Python中静态方法和类方法的区别,通过具体代码示例解释了两者的使用场景。静态方法不依赖于类状态,而类方法可以访问或修改类状态,并且可以被子类继承。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

class Sing:
    '''
定义某函数(方法)为静态,可以用@staticmethod装饰。
但这样此方法不可继承,而用@classmethod是可继承的。

    '''
    __instance=None
    def __int__(self):
        if not Sing.__instance:
            print('__init__方法命名...')
        else:
            print('实例已创建',self.getInstance())
    @classmethod           #装饰为静态
    def getInstance(cls):  #注意这里参数不是实例而是类!
        if not cls.__instance:
            cls.__instance=Sing()
        return cls.__instance
    @staticmethod           #装饰为静态
    def pri(self):
        print('产生实例')
class Side(Sing):
    pass
s1=Sing()
print(s1.getInstance())
s2=Sing()
print(s2.getInstance())
print(Side().getInstance())
s3=Side()
print(s3.getInstance())
print(s3.pri())     #TypeError: pri() missing 1 required positional argument: 'self'
                    #pri方法用@staticmethod装饰,不能继承,出现错误!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值