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)    #这里对象调用方法,发生绑定关系

只有对象在调用方法时,把对象里所有的值都传递给方法,他们之间就发生了一种绑定关系。

 

posted @ 2020-10-21 22:44  maday  阅读(69)  评论(0)    收藏  举报