当前位置: 首页 > 后端技术 > Python

Python自定义对象独有特性

时间:2023-03-25 21:41:26 Python

1.引入类OldboyStudent:school='oldboy'defchoose_course(self):print('ischoosingcourse')stu1=OldboyStudent()stu2=OldboyStudent()stu3=OldboyStudent()For上面提到的学生类,如果改变类的属性,其他对象的属性也会随之改变而且它也是一个命名空间,只不过对象的命名空间存储的是对象的唯一名称,而类存储的是对象共享的名称。所以我们可以直接为对象单独自定义名称。stu1.name='tank'stu1.age=18stu1.gender='male'print(stu1.name,stu1.age,stu1.gender)坦克18maletry:print(stu2.name,stu2.age,stu2.gender)除了e:print(e)'OldboyStudent'对象没有属性'name'stu2.name='sean'stu2.age=19stu2.gender='female'print(stu2.name,stu2.age,stu2.gender)sean19女3.属性查找先从自身查找,如果没有找到,在类中查找,如果没有类,会报错。即对象属性的查找顺序为:self-"class--"报错4.类定义阶段自定义属性definit(obj,x,y,z):obj.name=xobj.age=yobj.gender=zinit(stu1,'tank1',181,'male1')print(stu1.name,stu1.age,stu1.gender)tank1181male1init(stu2,'sean1',191,'female1')print(stu2.name,stu2.age,stu2.gender)sean1191female1使用上面的方法可以方便我们自定义属性,但是还是比较麻烦。如果能在实例化对象时自动触发计时属性就更方便了,所以可以使用类的__init__方法。classOldboyStudent:school='oldboy'def__init__(self,name,age,gender):"""班级调用时自动触发"""self.name=nameself.age=ageself.gender=genderprint('*'*50)defchoose_course(self):print('ischoosingcourse')try:stu1=OldboyStudent()exceptExceptionase:print(e)#学习中遇到的问题没人回答吗?小编创建了一个Python学习交流群:711312441__init__()missing3requiredpositionalarguments:'name','age',and'gender'stu1=OldboyStudent('nick',18,'male')******************************************************可以通过上述现象,调用类时会发生两件事:创建一个空对象自动触发类中__init__函数的执行,将stu1和调用类括号内的参数传递给print(stu1.__dict__){'name':'nick','age':18,'gender':'male'}