类,实例
8.1,类
1. self 是用来自动传递的,不用赋值;
self为前缀的变量可以供类中的所有方法使用;
每一个和类相关联的方法都会调用self,这样实例才可以访问类中的属性和方法;
在类中调用属性,用self.属性,否则就会报错;在实例中调用属性用实例名.name(这个过程是先找到实例再找属性。)
self.name=name:在传递参数的时候,self的作用是关联实例。
错误:class是小写,init,是class不是def,类里面的方法调用:self. 类里面的括号(self)
2. 类里面的非默认属性
对于非默认属性,并不在_init_()的括号里面指定,而是在类的构造函数体内指定,需要赋初始值
改变非默认属性值:
- 实例化赋值,这里的赋值不再和普通参数一样,这里是用实例.属性=来赋值;有点像类变量和实例变量。这里的必须要传递的参数写在Init里面,不是必须要传递的写在构造函数体内,实例化的时候用等号赋值进去一个值。所以这个值随时都能改,不安全。(像类变量?)
- 写一个方法;属性还是要先在Init函数体内定义,这个方法要调用已经定义的属性。传入参数。然后赋值
- 递增
写一个方法:
class Car(): --snip- def update_odometer(self, mileage): """ 将里程表读数设置为指定的值 禁止将里程表读数往回调 """ ❶ if mileage >= self.odometer_reading: self.odometer_reading = mileage else: ❷ print("You can't roll back an odometer!")
类里面的函数,定义都跟正常函数一样,同样是需要有参数,这里如果使用了类定义的属性,就要用self,类里面的方法没有return 也是不能返回结果的、
8.2,子类继承
创建子类时,父类必须包含在当前文件中,且位于子类前面
方法__init__() 就是普通的构造函数。
super() 是一个特殊函数,帮助Python将父类和子类关联起来,用来继承父类所有的属性。而且要放在init函数里面
class ElectricCar(Car): """电动汽车的独特之处""" ❸ def __init__(self, make, model, year): """初始化父类的属性""" ❹ super().__init__(make, model, year)
子类的重写:可在子类中定义一个这样的方法,即它与要重写的父类方法同名。
8.4 实例用作属性
当类里面的属性和方法过多,过于杂乱,可以将一些方法提取成一个类。
实例作为属性的声明:self.属性=实例()
A作为B的属性:B想用A里面的属性和方法:self.属性a=A() B.a.方法名() 这里是属性a不是实例A
问题:如果这个作为属性的实例需要传参数该怎么传。直接在实例作为属性的时候就传递了参数
为什么一定是B.a.方法名()。因为要调用a里面的方法才有意义,不然用a的__int__函数没有意义
经常的错误:
实例名使用多了错写成类名
__init__函数里面出来属性定义不要做别的处理。
使用非定义属性时前面不加前缀self
浙公网安备 33010602011771号