Python基础-12-类方法、静态方法

类方法和静态方法

类方法

是类本身所拥有的方法,需要用修饰器 @classmethod 来标识其为类方法,对于类方法,一般以cls作为第一个参数,能够通过实例对象和类本身去访问

 

① 类方法引用

# coding:utf-8

class People():
    # 类属性
    addr = "wuxi"

    # 类方法
    @classmethod
    def get_addr(cls):
        return cls.addr
    
p = People()
print(p.get_addr())  # 实例对象引用类方法
print(People.get_addr())  # 类对象引用类方法

② 类方法修改类属性

# coding:utf-8

class People():
    # 类属性
    addr = "wuxi"

    # 类方法
    @classmethod
    def get_addr(cls):
        return cls.addr

    @classmethod
    def set_addr(cls, addr):
        cls.addr = addr

People.set_addr("beijing")
print(People.addr)  # 结果为:beijing

 

静态方法

需要通过修饰器 @staticmethod 来进行修饰,静态方法不需要定义参数,没有self,通过类本身调用或者通过实例对象来调用

# coding:utf-8

class People():
    # 类属性
    addr = "wuxi"

    # 静态方法
    @staticmethod
    def get_addr():
        return People.addr

print(People.get_addr())  # 类对象直接调用
print(People().get_addr())  # 实例对象直接调用

 

总结:

self参数的为实例方法,cls参数的为类方法 @classmethod修饰,啥都没有的为静态方法@staticmethod修饰

(1)类方法的第一个参数是类对象cls,通过cls引用的必定是类本身的属性和方法

(2)实例方法的第一个参数是实例对象self,通过self引用的可能是类属性、也有可能是实例属性。(存在相同名称的类属性和实例属性的情况下,实例属性优先级更高)

(3)静态方法不需要额外定义参数,因此在静态方法中引用类属性的话,必须通过类本身来引用

 

代码部分:

class A():
    
    addr = "wuxi"

    def __init__(self,name,age):
        self.name = name
        self.age = age

    def example_func(self):
        """实例方法"""
        return self.name,self.age

    @classmethod
    def cls_func(cls,addr):
        """类方法"""
        cls.addr = addr
        return cls.addr

    @staticmethod
    def static_func(a,b):
        """静态方法"""
        return a+b
a = A("suner",20)
print("实例对象a调用实例方法:", a.example_func())
print("实例对象a调用类方法:", a.cls_func("shanghai"))
print("实例对象a调用类方法:", a.static_func(10,20))

print("类本身调用类方法:", A.cls_func("beijing"))
print("类本身调用静态方法:", A.static_func(10,20))

 

执行结果:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值