24.类和对象命名空间
类里可以定义两种属性:静态属性,动态属性,两个属性的作用不一样
每实例化一个对象,该对象都会含有该固定的静态属性。
在实例化对象时,根据传入的参数不同,动态属性也不同,就会导致每个对象的动态属性都不同
class Course: language='Chinese' #静态属性 def __init__(self,teacher,course_name,period,price): self.teacher=teacher self.name=course_name self.period=period self.price=price def shangke(self): #动态属性 self.period-=1 #上一次课周期减一个月 python=Course('egon','python',6,20000) #不仅方便输入,还能有效的规范参数的传入
print(python.language) #静态属性可以被对象调用
修改静态属性
可以通过操作来改变静态属性language的值
代码如下:
1.通过对象改变静态属性的值
Course.language='English' #静态属性可以被类调用
通过Course.__dict__['language']='English'来改是错误的
2.通过对象来改变静态属性的值
python.language='Chinese'
3,修改静态属性注意事项
对象修改静态属性时,会在对象自己的命名空间内增添一个属性,该对象的这个属性发生变化,类中的静态属性不变,对其他方法依然作用。因此,对象是无法改变类的静态参数的,只能给自己添加参数。
对于不可变的数据类型来说,类变量最好用类名操作,即(类名.变量名);对于可变数据类型来说,修改是共享的,重新赋值是独立的,如静态属性是language=['Chinese'],就可以通过python.language[0]='English'改变
题目。
练习题目:
创建一个类,每实例化一个对象,就把该对象记录下来:
class jilu: c=0 def __init__(self): print('这是一个新对象') jilu.c+=1 wanf=jilu() print(wanf.c) asd=jilu() print(wanf.c)
绑定:
class Jilu: c=0 def hello(self): pass a=Jilu() print(Jilu.hello) print(a.hello) #这里对象调用方法,发生绑定关系
只有对象在调用方法时,把对象里所有的值都传递给方法,他们之间就发生了一种绑定关系。

浙公网安备 33010602011771号