学习笔记,仅供参考,有错必纠
学习资源:图解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