类的命令空间
Posted quiet-sun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了类的命令空间相关的知识,希望对你有一定的参考价值。
1. 类可以定义两种属性:
1> 静态属性:直接在类中定义的变量,是共享给所有实例对象的;
2> 动态属性:定义在类中的方法,是绑定到所有实例对象的;
3> 创建一个对象/实例就会创建一个对象/实例的名称空间,存放对象/实例的名字,称为对象/实例的属性;
4> 对象/实例访问对象时,先找自己的,没有再找类的,之后再找父类的,再没有就抛错;
class Course: language = [‘Chinese‘] def __init__(self,teacher,course,period,price): self.teacher = teacher self.name = course self.period = period self.price = price def func(self): pass python=Course(‘egon‘,‘python‘,‘6 months‘,2000) linux=Course(‘amy‘,‘linux‘,‘9 months‘,4000) python.language = ‘English‘ #python实例自己增加了一个属性language print(‘Course.language的id:‘,id(Course.language)) print(‘python.language的id:‘,id(python.language)) #新地址 print(‘linux.language的id:‘,id(linux.language)) print(‘--------------------‘) print(‘Course.language:‘,Course.language) print(‘python.language:‘,python.language) print(‘linux.language:‘,linux.language) #linux自己没有属性language,引用了类的静态属性 print(‘++++++++++++++++++++‘) print(‘Course.__dict__:‘,Course.__dict__) print(‘python.__dict__:‘,python.__dict__) print(‘linux.__dict__:‘,linux.__dict__)
2. 对于不可变数据类型,类变量最好用类操作,而不使用实例操作;
3. 对于可变数据类型,实例名的修改是共享的(同一个命令空间),重新赋值是独立的(新的命令空间);
class Course: language = [‘Chinese‘] def __init__(self,teacher,course,period,price): self.teacher = teacher self.name = course self.period = period self.price = price def func(self): pass python=Course(‘egon‘,‘python‘,‘6 months‘,2000) linux=Course(‘amy‘,‘linux‘,‘9 months‘,4000) python.language[0] = ‘English‘ #直接修改了Course.language对象所指的列表对象[‘Chinese‘]的值修改为English print(‘Course.language的id:‘,id(Course.language)) print(‘python.language的id:‘,id(python.language)) #引用的是Course.language对象所指的列表的值 print(‘linux.language的id:‘,id(linux.language)) #引用的是Course.language对象所指的列表的值 print(‘python.language[0]的id:‘,id(python.language[0])) #列表对象[‘Chinese‘]的id print(‘--------------------‘) print(‘Course.language:‘,Course.language) print(‘python.language:‘,python.language) print(‘linux.language:‘,linux.language) print(‘++++++++++++++++++++‘) print(‘Course.__dict__:‘,Course.__dict__) print(‘python.__dict__:‘,python.__dict__) print(‘linux.__dict__:‘,linux.__dict__)
4. 一个应用
#创建一个类,每实例化一个对象就计数; #最终所有的对象共享这个数据; class Foo: count = 0 def __init__(self): Foo.count +=1 f1=Foo() f2=Foo() print(f1.count) print(f2.count)
5. 绑定方法:实例对象调解类内的方法时,这个实例对象就和这个方法产生了绑定,即绑定方法;
def func(): pass class Foo(): def func(self): print(‘func‘) f1=Foo() print(func) print(Foo.func) print(f1) # print(f1.func) # f1与类Foo.func方法绑定
以上是关于类的命令空间的主要内容,如果未能解决你的问题,请参考以下文章
VSCode自定义代码片段15——git命令操作一个完整流程