一、为对象定制自己独有的属性 例1 class OldboyStudent: school='oldboy' def choose_course(self): print('is choosing course') stu1=OldboyStudent() stu2=OldboyStudent() stu3=OldboyStudent() 对象本质也就是一个名称空间而已,对象名称空间是用存放对象自己独有的名字/属性,而 类中存放的是对象们共有的属性 # print(stu1.__dict__) # print(stu2.__dict__) # print(stu3.__dict__) stu1.name='耗哥' stu1.age=18 stu1.sex='male' # print(stu1.name,stu1.age,stu1.sex) # print(stu1.__dict__) stu2.name='猪哥' stu2.age=17 stu2.sex='male' stu3.name='帅翔' stu3.age=19 stu3.sex='female' 例2 class OldboyStudent: school='oldboy' def choose_course(self): print('is choosing course') stu1=OldboyStudent() stu2=OldboyStudent() stu3=OldboyStudent() def init(obj,x,y,z): obj.name=x obj.age=y obj.sex=z stu1.name='耗哥' stu1.age=18 stu1.sex='male' init(stu1,'耗哥',18,'male') stu2.name='猪哥' stu2.age=17 stu2.sex='male' init(stu2,'诸哥',17,'male') stu3.name='帅翔' stu3.age=19 stu3.sex='female' init(stu3,'帅翔',19,'female') print(stu1.__dict__) print(stu2.__dict__) print(stu3.__dict__) 二、属性查找 class OldboyStudent: school='oldboy' def __init__(obj, x, y, z): #会在调用类时自动触发 obj.name = x #stu1.name='耗哥' obj.age = y #stu1.age=18 obj.sex = z #stu1.sex='male' def choose_course(self): print('is choosing course') 调用类时发生两件事 1、创造一个空对象stu1 2、自动触发类中__init__功能的执行,将stu1以及调用类括号内的参数一同传入 stu1=OldboyStudent('耗哥',18,'male') #OldboyStudent.__init__(stu1,'耗哥',18,'male') stu2=OldboyStudent('猪哥',17,'male') stu3=OldboyStudent('帅翔',19,'female') print(stu1.__dict__) print(stu2.__dict__) print(stu3.__dict__)
三、绑定方法
class OldboyStudent: school='oldboy' def __init__(self, x, y, z): #会在调用类时自动触发 self.name = x #stu1.name='耗哥' self.age = y #stu1.age=18 self.sex = z #stu1.sex='male' def choose_course(self,x): print('%s is choosing course' %self.name) def func(): pass 类名称空间中定义的数据属性和函数属性都是共享给所有对象用的 对象名称空间中定义的只有数据属性,而且时对象所独有的数据属性 stu1=OldboyStudent('耗哥',18,'male') stu2=OldboyStudent('猪哥',17,'male') stu3=OldboyStudent('帅翔',19,'female') print(stu1.name) print(stu1.school) 类中定义的函数是类的函数属性,类可以使用,但使用的就是一个普通的函数而已,意味着需要完全遵循函数的参数规则,该传几个值就传几个 print(OldboyStudent.choose_course) OldboyStudent.choose_course(123) 类中定义的函数是共享给所有对象的,对象也可以使用,而且是绑定给对象用的, 绑定的效果:绑定给谁,就应该由谁来调用,谁来调用就会将谁当作第一个参数自动传入 print(id(stu1.choose_course)) print(id(stu2.choose_course)) print(id(stu3.choose_course)) print(id(OldboyStudent.choose_course)) print(id(stu1.school)) print(id(stu2.school)) print(id(stu3.school)) print(id(stu1.name),id(stu2.name),id(stu3.name)) stu1.choose_course(1) stu2.choose_course(2) stu3.choose_course(3) stu1.func() 补充:类中定义的函数,类确实可以使用,但其实类定义的函数大多情况下都是绑定给对象用的,所以在类中定义的函数都应该自带一个参数self 四、类即类型 在python3中统一了类与类型的概念,类就是类型 class OldboyStudent: school='oldboy' def __init__(self, x, y, z): #会在调用类时自动触发 self.name = x #stu1.name='耗哥' self.age = y #stu1.age=18 self.sex = z #stu1.sex='male' def choose_course(self,x): print('%s is choosing course' %self.name) stu1=OldboyStudent('耗哥',18,'male') # stu1.choose_course(1) #OldboyStudent.choose_course(stu1,1) # OldboyStudent.choose_course(stu1,1) l=[1,2,3] #l=list([1,2,3]) # print(type(l)) # l.append(4) #list.append(l,4) list.append(l,4) print(l)