类与对象:
对象: 属性和方法的结合体,类是一系列共同的属性和方法
在现实中:先有对象再有类
程序中:现有类再有对象
定义类:(类名建议用驼峰命名) class关键 类名
class Student: # 变量表示属性 school=‘oldboy‘ def choose(self) print("选课...") def study(self): print(‘学习‘) # 生成对象 类加括号,生成对象 stu1 = Student() # 获取属性和方法 通过.来获取 print(stu1.school)
print(stu1.choose) stu2 = Student() print(stu2.school)
打印stu1.choose打印的是他的地址,====>实例化产生的对象.未加括号的方法是表示的是这个方法的内存地址,上面的那些函数是类的函数,当对象调用的时候,他就变成了对象的绑定方法,查看类中的属性和方法print(Student.__dict__),他表示的是以字典的形式将k,v打印出来, k是类中的变量名, v是变量名的值, 在类中的函数的话,有函数还有函数的内存地址,那么这个k就是函数,v就是函数的地址,所以打印类.__dict__就打印的是类中的属性和方法,打印的是一个大字典
字典取值可以用中括号和get方法,我们可以在内存中取一个school,print(Student.__dict__[‘school‘]) 打印出的结果是oldboy,,能拿到属性也就意味着能拿到方法,我们打印print(Student.__dict__[‘choose‘])打印的结果就是choose后面的一串内存地址,字典里面可以通过k值取value值,拿到内存地址的第一反应就是加括号调用,当我们用加括号的方式进行调用时,有个问题会出现,就是上面函数中有一个参数self,那这怎么解决呢,我们在括号里随便填一个参数就行,然后进行调用即可,类调用属性和方法:类名.属性/方法, 获取对象的属性和方法:对象.__dict__. 对象来调用方法: 第一个参数不用传, 可以用stu1.choose()来获取 对象.属性/方法
在刚开始产生对象的时候打印对象.__dict__,结果是一个none, 这就跟一个新生儿一样,刚生下来的时候,什么都不会,什么都没有,在逐渐的成长中,才学会技能和本领,要想使这个对象内部有值,我们可以为其进行赋值,具体方法就是:stu1.name=‘panshao‘ stu1.school =‘xxx‘,这样这个对象就获得了两个新的属性
属性的查找顺序: 先从对象自身找, =====>在类中找======>如果类中没有就会出现报错的情况
向对象中放属性: 第一种方式 stu1 = Student() stu1.name = ‘panshao‘
第二种方式: 通过__init__方法, 内部帮我们做了一些事, 当我在实例化产生对象的时候,会自动调用__init__方法,完成对象的初始化
绑定方法:
定义在类的内部方法: 如果类来调用,就是一个普通函数,有几个参数就需要传几个参数, 对象来调用,他叫对象的绑定方法,第一个参数不用传,自动传递, 他不是把名字传过去了,而是把自身给传过去了,把自己传过去之后就可以改东西了,他这个对象就会被改掉,比如说我这个人生下来是个空的人,我去学校里去学习,调用了我自己的学习方法,学完之后,我就有这个学习方法的能力了,那另一个人调用了另外一种学习方法就会有另外一种学习方法的能力,