• 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
  • 相关阅读:
    Android开发之百度地图定位打卡
    java毕业设计智慧问诊系统Mybatis+系统+数据库+调试部署
    MobileNetv1、MobileNetv2、MobileNetv3网络讲解
    八锁现象——synchronized关键字实战详解
    80页4万字政务综合服务平台建设项目方案书(完整版)
    Java Web Start 指南
    远程计算机或设备将不接受连接
    【Proteus仿真】定时器0作为16位计数器使用示例
    移远EC600U-CN开发板 11.15
    【设计模式】Java设计模式 - 享元模式
  • 原文地址:https://blog.csdn.net/sunxiaopengsun/article/details/133752028