实例属性:在实例对象中定义的属性
类属性(静态属性):
在类对象(也就是类)中定义的属性,并且多个实例对象之间共享一份类属性。
类属性的使用方式:
类名.类属性
也可以使用 对象名.类属性
注意
(1)、对于不可变数据类型来说: 对象名.静态属性名称=值 是给对象中添加属性名称,而不是进行修改。
(2).对于可变数据类型来说:
如果对象是修改可变数据类型变量中的数据,都有影响。
如果是从新给可变数据类型变量赋值,这是给该对象添加属性。
练习1:定义一个课程类定义一个language不可变数据类型变量,分别使用类对象和实例对象调用类属性。
练习2:分别使用类对象和实例对象修改类属性的值。
使用类对象修改类属性值
类对象改变类属性值:
class Course:
language='Chinese' #类属性或者静态属性
def money(self):
print('课程开始了')
print(Course.language,id(Course.language)) # Chinese
Course.language='python' #类对象: 把类属性language的值改变了,改变之后重新开辟了内存空间,在调用此属性的时候内存地址会发生改变
print(Course.language)
# 对象调用
# 使用对象来调用
python=Course()
print(python.language,id(python.language)) # python
java=Course()
print(java.language,id(java.language)) #python
运行结果:
Chinese 34656584
python 41734584
python 41734584
实例对象:
class Course:
language='Chinese' #类属性或者静态属性
def money(self):
print('课程开始了')
print(Course.language,id(Course.language)) # Chinese
# 对象调用
# 使用对象来调用
python=Course()
python.language='python' #使用实例对象修改类属性的值,
# 注意实际上是给python对象内部添加一个属性language,并不是修改静态类属性,与类属性无关,调用时调用的是自己的内部属性,不再是类属性。内存地址将发生变化。
print(python.language,id(python.language)) # python
java=Course()
print(java.language,id(java.language)) #Chinese
运行结果:
Chinese 31248824
python 35574032
Chinese 31248824
练习3:使用实例对象修改可变数据类型的元素值
对于可变数据类型来说:
如果对象是修改可变数据类型变量中的数据,都有影响。
如果是从新给可变数据类型变量赋值,这是给该对象添加属性。
class Course:
language_lst=['python']
def money(self):
print('课程开始了')
print(Course.language_lst) # ['python']
python=Course()
python.language_lst.append("java") #使用实例对象python修改类对象language_lst的值,因为类对象是可变数据类型,修改之后将发生变化
# python.language_lst=['math','python'] # 赋值运算,自己内存中添加了一个language_lst变量,
print(python.language_lst) # ['python', 'java']
java=Course()
print(java.language_lst) # ['python', 'java']
print(Course.language_lst) # ['python', 'java']
练习4:使用实例对象重新给类属性进行赋值
class Course:
language_lst=['python']
def money(self):
print('课程开始了')
print(Course.language_lst) # ['python']
python=Course()
# python.language_lst=['math','python'] # 赋值运算,自己内存中添加了一个language_lst变量,相当于给当前对象python添加属性,不会影响类对象的属性
print(python.language_lst) # ['math','python']
java=Course()
print(java.language_lst) # ['python']
print(Course.language_lst) # ['python']