天天看点

python学习高级篇(part1)--类属性

学习笔记,仅供参考,有错必纠

学习资源:图解python

文章目录

  • ​​类属性​​
  • ​​举个例子​​
  • ​​举个例子​​

类属性

类属性指的是类对象所绑定的属性。

绑定类属性(给类对象绑定属性)的方式有两种:

  • 在类对象的内部(方法外)
  • 语法格式:​

    ​属性名 = 属性值​

    ​;
  • 在类对象的外部
  • Python是动态语言,所以,在类对象创建之后,可以对其动态地绑定属性;
  • 语法格式:​

    ​类对象.属性名 = 属性值​

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

访问类属性的方式有两种:

  • 在类对象的内部(方法中)
  • 语法格式:​

    ​类对象.属性名​

    ​;
  • 在类对象的外部
  • 语法格式:​

    ​类对象.属性名​

    ​​或​

    ​实例对象.属性名​

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

举个例子

代码:

class MyClass(object):
    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()      

输出:

18
18
18
56
56
73
73
73      

访问实例属性和类属性都可以通过​

​实例对象.属性名​

​的方式。

当通过​

​实例对象.属性名​

​的方式访问属性时,会先查找指定的实例对象中有没有指定名称的实例属性,如果没有,再查找对应的类对象中有没有指定名称的类属性。

所以,当通过​

​实例对象.属性名​

​的方式访问属性时,如果实例属性和类属性同名,实例属性会屏蔽掉类属性。

当通过​

​实例对象.属性名 = 属性值​

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

举个例子

代码:

class Person(object):
    age = 18

p = Person()

print(p.age)
print(Person.age)

p.age = 19
print(p.age)
print(Person.age)

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)      

结果:

18
18
19
18
18
18
20
18
21
20
21