欢迎光临
我们一直在努力

Python中类方法、静态方法、实例方法是否能访问类属性和实例属性

Python中类方法、静态方法、实例方法是否能访问类属性和实例属性

文章目录

  • Python中类方法、静态方法、实例方法是否能访问类属性和实例属性
  • 1. 实例方法(最常用,第一个参数 self)
  • 2. 类方法 @classmethod(参数 cls,代表当前类)
  • 3. 静态方法 @staticmethod(无 self/cls 参数)
  • 补充:强行在类 / 静态方法拿实例属性(不规范)
  • 完整代码
  • 类属性:定义在类里面、方法外面,类名.属性 / cls.属性
  • 实例属性:init 中 self.属性,绑定单个对象

在这里插入图片描述

1. 实例方法(最常用,第一个参数 self)

class Demo:
cls_attr = "类属性" # 类属性
def __init__(self):
self.obj_attr = "实例属性" # 实例属性

def func(self):
print(self.cls_attr) # 访问类属性 ✅
print(self.obj_attr) # 访问实例属性 ✅

  • self指向实例对象,既能通过 self 拿实例属性,也能通过 self 访问类属性。

2. 类方法 @classmethod(参数 cls,代表当前类)

@classmethod
def cls_func(cls):
print(cls.cls_attr) # 通过cls访问类属性 ✅
# print(cls.obj_attr) # 报错!cls是类,没有实例属性 ❌

  • cls是类本身,只能访问类属性;没有实例对象,无法直接访问实例属性。

    特例:传入实例对象手动访问(不推荐):obj.obj_attr,不属于方法原生权限。

3. 静态方法 @staticmethod(无 self/cls 参数)

@staticmethod
def sta_func():
print(Demo.cls_attr) # 类名.类属性 ✅
# print(Demo.obj_attr) # 报错 ❌

  • 不属于类也不属于实例,只能用「类名。类属性」访问类属性;没有实例引用,不能直接访问实例属性。

一句话速记

  • 实例方法 (self):全都能访问
  • 类方法 (cls):只能访问类属性
  • 静态方法:只能通过类名访问类属性
  • 补充:强行在类 / 静态方法拿实例属性(不规范)

    必须手动传入实例对象:

    @classmethod
    def cls_func(cls, ins):
    print(ins.obj_attr)
    d = Demo()
    Demo.cls_func(d)

    只是参数传参,不是方法本身自带访问权限

    完整代码

    class Demo:
    cls_attr = "类属性"

    def __init__(self):
    self.obj_attr = "实例属性" # 实例属性

    def func(self):
    print(self.cls_attr) # 访问类属性
    print(self.obj_attr) # 访问实例属性

    @classmethod
    def cls_func(cls):
    print(cls.cls_attr) # 通过cls访问类属性 ✅
    print(cls.obj_attr) # 报错!cls是类,没有实例属性 ❌

    @staticmethod
    def sta_func():
    print(Demo.cls_attr) # 类名.类属性 ✅
    # print(Demo.obj_attr)

    @classmethod
    def cls_func2(cls, ins):
    print(ins.obj_attr)

    if __name__ == '__main__':
    d = Demo()
    Demo.cls_func2(d)

    赞(0)
    未经允许不得转载:171主机测评 » Python中类方法、静态方法、实例方法是否能访问类属性和实例属性
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址