属性声明位置:
1. 已知:属性声明在__init__()方法中,成员属性,每个创建的对象 这些属性数据独立的。
2. 属性声明在类型中,方法外。所有对象都能访问但是不能直接修改的数据。
专门定义所有对象访问的公共数据
3. 属性{不能称为属性~变量}声明在类型外部!全局变量
任何类型创建的对象都能访问的数据。
成员属性[对象]-> 类属性[当前类型的所有对象]-> 全局变量[所有对象]
class Person:
# 类属性
max_age = 150
def __init__(self, name):
# 成员属性
self.name = name
# 扩展属性
self.age = 150
# 成员属性:成员~对象,成员属性就是对象的属性,每个对象的属性数据都是互相独立的。
p1 = Person("tom")
p2 = Person("jerry")
print(p1.name) # tom
print(p2.name) # jerry
# 扩展属性,可以修改
print(p1.age) # 150
print(p2.age) # 150
p1.age = 120
print(p1.age) # 120
p2.age = 100
print(p2.age) # 100
# 类属性,由该类创建的所有对象都可以访问,但是不能修改
p1.max_age = 99 # 扩展属性,和类属性同名,但不一样
print(p1.max_age) #输出的扩展属性 99
print(p2.max_age) # 类属性 150
# 类型可以修改类属性,影响所有对象的访问结果
Person.max_age = 120
print(p1.max_age) #输出的扩展属性 99
print(p2.max_age) #更改后的类属性 120
类属性:为什么可以让类型修改,不能让对象修改?
面试题
~类型可以创建属于该类型的所有对象,类型可以修改影响所有对象的类属性数据。
# 对象和对象之间的数据都是独立的,对象不能操作影响其他对象的数据,类属性就是这样的数据。