Python学习笔记
关于类的学习
-
句点表示法是一种实用的方法。访问类中的属性和调用类中的方法都是采用句点表示法来实现的。例:
访问属性:my_dog.name (name是Dog()类的属性)
调用方法:my_dog.roll() (roll()是Dog()类中的一种方法) -
关于定义类时怎样定义变量和属性的解释:
def init(self, name, age):
self.name = name
self.age = age
这是一个在定义类时的初始化部分, def init(self, name, age)——其中self可以理解为定义的类具体某个特殊实例的代号,name和age其实就是定义的两个变量而已,就像函数一样,既然定义了这两个变量,那么在具体生成一个实例时就要输入参数,其中一个参数对应变量name,其中一个参数对应变量age,如果将这里的name和age理解为属性的话就错了;那么属性又是在什么时候定义的呢,其实定义属性是在其下的语句中:self.name = name, self.age = age,self.name就明确了这个类有一个name的属性,self.age 明确了这个类有一个age的属性。self.name = name,这里的等号后面的name就是上文提到的变量啦,这就是说我self有一个name属性,属性值=变量name,而具体变量name又等于多少就需要你在生成一个实例时为变量name指定的参数,最后变量name就会将这个参数给属性name,这样就完成了为属性赋值。 -
在初始化之后,就可以在接下来定义类所包含的方法,如def sit(self): …就是定义我这个类self有一个sit的方法。
-
类有两个基本组成元素:属性和方法。
-
在python的类中,你可以对属性进行下面的相关操作:
5.1 在方法__init__() 内指定属性及其初始值,那么就无需再定义变量以提供实参;
5.2 通过在对实例的属性直接指定实参来修改实例的属性值,如my_new_car.odometer_reading = 23,就直接将所生成实例的odometer_reading属性值变为23;
5.2 通过方法修改属性值——在类块中增加一个方法,在这个方法中编写程序语句来修改属性值,那么在生成一个实例之后就只要调用这个方法就能修改属性值;
5.3 通过方法对属性值进行递增,这个与5.2中的道理相同——在类块中增加一个方法,在这个方法中编写程序语句来实现这样一个功能:调用这个方法时,给定一个量,那么属性值就会在原来值的基础上加上由这个量经过代码块产生的增量。 -
关于类的继承:
要继承一个类,必须最起码做到以下两点:
6.1 在定义类时在括号中指定父类名(且上文代码有对应的父类),比如:class ElectricCar(Car):——其中Car是上文定义的父类;
6.2 必须首先进行初始化工作,初始化父类的属性:
def init(self, make, model, year):
super().init(make, model, year)
这里super指明继承了一个父类, super().init(make, model, year)相当于将父类Car自class Car(): 之后的所有代码均导入了进来为子类所用,这样也就实现了所谓的继承。 -
给子类定义属性起始没有什么特殊的,给子类定义属性就和给类定义属性一样,都是在def init(self, make, model, year): 之后,只不过定义是在super().init(make, model, year)导入父类之后。
-
给子类定义方法和给父类定义方法是一样的。
-
有时候并非父类中的所有属性和方法子类都需要或符合子类的要求,为此可在子类中定义一个这样的方法,即它与要重写的父类方法同名。这样,Python将不会考虑这个父类方法,而只关注你在子类中定义的相应方法。
-
使用代码模拟实物时,你可能会发现自己给类添加的细节越来越多:属性和方法清单以及文件都越来越长。在这种情况下,可能需要将类的一部分作为一个独立的类提取出来。你可以将大型类拆分成多个协同工作的小类。定义好一个小类之后,将其作为大类的属性。比如有一个小类Battery(),将其作为大类ElectricCar的属性:self.battery = Battery(),在引用Battery中的方法时,只要多加一个句点就好了:my_tesla.battery.describe_battery()