• python怎么给类属性赋值 python 类属性


    类属性

    绑定类属性的两种方法

    1、在类对象内部方法中,语法格式:

    
    属性名 = 属性值
    
    
    • 1
    • 2
    • 3

    2、在类对象外部,Python是动态语言,在类对象创建后可对其动态地绑定属性。语法格式:

    
    类对象.属性名 = 属性值
    
    
    • 1
    • 2
    • 3

    如果指定名称的类属性已经存在,则是对类属性进行修改。

    访问类属性的两种方法

    1、在类对象内部方法中,语法格式:

    
    类对象.属性名
    
    
    • 1
    • 2
    • 3

    2、在类对象外部有两种方式,语法格式:

    
    类对象.属性名
    
    实例对象.属性名
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    类对象的所有实例对象都有一个指向类对象的指针,所以类对象的所有实例对象都可以访问类属性。

    类对象绑定实例属性示例

    之所以添加前缀"类对象",是为了表明类属性被哪个类对象所绑定。

    class MyClass():
    # 在类对象内部(方法外)绑定类属性
    ca1 = 18
    def do_sth(self):
    # 在类对象内部(方法中)访问类属性
    print(MyClass.ca1)
    def do_another(self):
    # 在类对象内部(方法中)访问类属性
    print(MyClass.ca2)
    mc = MyClass()
    # 在类对象外部调用方法, 使得在类对象内部(方法中)访问类属性
    mc.do_sth()
    # 在类对象外部通过类对象访问类属性
    print(MyClass.ca1)
    # 在类对象外部通过实例对象访问类属性
    print(mc.ca1)
    # 在类对象外部绑定类属性
    MyClass.ca2 = 56
    # 在类对象外部通过类对象访问类属性
    print(MyClass.ca2)
    # 在类对象外部通过实例对象访问类属性
    print(mc.ca2)
    # 在类对象外部修改绑定的类属性值
    MyClass.ca2 = 73
    # 在类对象外部通过类对象访问类属性
    print(MyClass.ca2)
    # 在类独享外部通过实例对象访问类属性
    print(mc.ca2)
    # 在类对象外部调用方法, 使得在类对象内部访问类属性
    mc.do_another()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    实例属性与类属性访问区别

    访问实例属性和类属性都可以通过实例对象.属性名的方式。当通过实例对象.属性名的方式访问属性时,会先查找指定的实例对象中有没有指定名称的实例属性,如果没有在查找对应的类对象中有没有指定名称的类属性。所以当通过实例对象.属性名的方式访问属性时,如果实例属性和类属性同名,实例属性会屏蔽掉类属性。

    当通过实例对象.属性名 = 属性值的方式绑定属性时,这里的属性只表示实例属性(因为类属性没有这样的绑定方式),所以,只会查找指定的实例对象有没有绑定指定名称的实例属性,如果没有则进行绑定,如果已经绑定则对属性值进行修改。

    登录后复制

    class Person():
    age = 18
    p = Person()
    # 在实例对象p中没有找到名为age的实例属性,然后在类对象Person中找到了名为age的类属性
    print(p.age)
    # 打印名为age的类属性
    print(Person.age)
    # 给实例对象p绑定实例属性
    p.age = 19
    # 实例属性屏蔽掉了同名的类属性
    print(p.age)
    # 打印名为age的类属性
    print(Person.age)
    # 删除实例对象p绑定的实例属性
    del p.age
    print(p.age)
    p1 = Person()
    p2 = Person()
    p1.age +=2
    print(Person.age)
    print(p1.age)
    print(p2.age)
    Person.age +=3
    print(Person.age)
    print(p1.age)
    print(p2.age)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
  • 相关阅读:
    qml基础语法
    JMeter笔记12 | JMeter集合点
    quarkus的一些注解1
    Q&A特辑 | 看了这场直播,我找到了设备指纹“从不说谎”的原因
    韦东山linux驱动开发学习【常更】
    DGIOT基本功能介绍——组态编辑配置
    js实现贪吃蛇游戏
    打击勒索病毒:防御.kat6.l6st6r勒索病毒的最佳策略
    大屏小程序探索实践 | Cube 技术解读
    动态IP代理是什么?一文看懂动态代理IP
  • 原文地址:https://blog.csdn.net/sunxiaopengsun/article/details/133752028