记录Python学习之路-----------------------------------------------------类

这一章主要是关于类的继承,一个类继承另一类的时候,它将自动获取另一个类的所有属性和方法,原有的类为父类。现有的类为子类,子类继承父类的所有的属性和方法,还可以自我定义新属性和方法。

子类的方法__init__:创建子类时,父类必须包含其中,父类是Car,定义一个ElectricCar子类

class Car():
    def __init__(self,make,model,year):    #初始化
        self.make=make
        self.model=model
        self.year=year
        self.odometer_reading=0   #  定义里程表的默认值

    def get_describe(self):              #定义描述整体信息的方法
        long_name=str(self.year)+' '+self.make+self.model
        return long_name.title()

    def update_odometer(self,milege):     #定义更新属性值方法
        if milege>=self.odometer_reading:
            self.odometer_reading=milege
        else:                             #确定数值不会回调
            print("wrong data!")
    
    def increment_odometer(self,miles):   #定义递增方法
        self.odometer_reading+=miles

    def read_odometer(self):     #打印里程数
        print("This car has "+str(self.odometer_reading)+" miles")
 
class ElectricCar(Car):       #创建子类
    def __init__(self,make,model,year):
        super().__init__(make,model,year) #super函数关联父类和子类

my_tesla=ElectricCar('tesla',',model s',2018)
print(my_tesla.get_describe()) 

1.创建子类的时候,在括号里指定父类的名称,__init__接受Car 实例所要的信息

2.super是一个特殊函数,让父类与子类关联起来,让子类调用父类的方法__init__,获取父类的所有属性。

输出如下:

上面只是简单继承父类,子类没有自己创建属性与方法,子类也可以创建自己的属性:

class Car():
    def __init__(self,make,model,year):    #初始化
        self.make=make
        self.model=model
        self.year=year
        self.odometer_reading=0   #  定义里程表的默认值

    def get_describe(self):              #定义描述整体信息的方法
        long_name=str(self.year)+' '+self.make+self.model
        return long_name.title()

    def update_odometer(self,milege):     #定义更新属性值方法
        if milege>=self.odometer_reading:
            self.odometer_reading=milege
        else:                             #确定数值不会回调
            print("wrong data!")
    
    def increment_odometer(self,miles):   #定义递增方法
        self.odometer_reading+=miles

    def read_odometer(self):     #打印里程数
        print("This car has "+str(self.odometer_reading)+" miles")
 
class ElectricCar(Car):       #创建子类
    def __init__(self,make,model,year):
        super().__init__(make,model,year) #super函数关联父类和子类
        self.battery_size=70   #定义子类的新属性电池量,默认值70

    def battery_describe(self):     #打印电池量
        print("This car has a "+str(self.battery_size)+"-kwh")

my_tesla=ElectricCar('tesla',',model s',2018)
print(my_tesla.get_describe()) 
my_tesla.battery_describe()

在子类方法__init__里创建子类属性。

输出如下:

但是也有以下情况,有时候父类的某些属性,子类不符合,这时候就可以重写父类的方法,我们可以在子类中先定义一个方法,这个方法要与需要重写的父类方法同名,这样Python就只会考虑子类里的方法。

为了追求Python的代码简洁,我们经常会将实例用作属性。因为如果一个类的细节很多很多,就可以将类的一部分提取出来创建新类,例如如下,将Battery 用作小类:

class Car():
    def __init__(self,make,model,year):    #初始化
        self.make=make
        self.model=model
        self.year=year
        self.odometer_reading=0   #  定义里程表的默认值

    def get_describe(self):              #定义描述整体信息的方法
        long_name=str(self.year)+' '+self.make+self.model
        return long_name.title()

    def update_odometer(self,milege):     #定义更新属性值方法
        if milege>=self.odometer_reading:
            self.odometer_reading=milege
        else:                             #确定数值不会回调
            print("wrong data!")
    
    def increment_odometer(self,miles):   #定义递增方法
        self.odometer_reading+=miles

    def read_odometer(self):     #打印里程数
        print("This car has "+str(self.odometer_reading)+" miles")

class Battery():    #定义电池类
    def __init__(self,battery_size=70):
        self.battery_size=battery_size

    def battery_describe(self):     #打印电池量
        print("This car has a "+str(self.battery_size)+"-kwh")
 
class ElectricCar(Car):       #创建子类
    def __init__(self,make,model,year):
        super().__init__(make,model,year) #super函数关联父类和子类
        self.battery=Battery()    #创建的新属性


my_tesla=ElectricCar('tesla',',model s',2018)
print(my_tesla.get_describe()) 
my_tesla.battery.battery_describe()

 输出如下:

 

类除了继承,还可以封装,也就是跟函数一样可以导入模块

先创建一个文件,保存你所写的类,建议每个模块类写上备注,这样比较清晰,

再创建一个文件,编写你想要的程序,导入类,

from 模块名 import 类名

从一个模块导入多个类:

from 模块名 import 类1,类2

导入整个模块:

from 模块名

 导入模块中的所有类;

from 模块名 import *

猜你喜欢

转载自blog.csdn.net/shinhwa96/article/details/84066319