python定义一个类完了执行啥都没有_python 类 - 继承

继承

什么是继承?

编写类时,并非总要从空白开始。如果要编写的类是另一个现成类的特殊版本,可使用继承。

一个类继承另一个类时,将自动获得另一个类的所有属性和方法。现有的类称为父类,而新类称为子类。

子类继承了其父类的所有属性和方法,同时也可以定义自己的属性和方法。

1、子类的方法__init__

创建子类时,首先要完成的是将父类的所有属性和方法继承,这里使用子类的方法 __init__();

#继承

#子类的方法__init__()

class Car():

"""一次模拟汽车的简单尝试"""

def __init__(self,make,model,year):

self.make = make

self.model = model

self.year = year

self.odometer_reading = 0

def get_descriptive_name(self):

long_name = str(self.year) + " " + self.make + " " + self.model

return long_name.title()

def read_odometer(self):

print("This car has" + str(self.odometer_reading) + "mile on it.")

def update_odomter(self,mileage):

if mileage >= self.odometer_reading:

self.odometer_reading = mileage

else:

print("You can't roll back an odometer!")

def increment_odometer(self,miles):

self.odometer_reading += miles

class ElectricCar(Car):

"""电动汽车的独特"""

def __init__(self,make,model,year):

"""初始化父类的属性"""

super().__init__(make,model,year)

my_tesla = ElectricCar('tesla','model X',2018)

print(my_tesla.get_descriptive_name())

执行结果:

1 2018 Tesla Model X

注意点:

创建子类时,父类必须包含在当前文件中,且位于子类前面。

super()是一个特殊函数,帮助父类和子类关联起来。

父类也称为超类(superclass)

1.1、给子类定义属性和方法

在一个类继承另一类后,可添加区分子类和父类所需的新属性和方法。

1 classCar():2 """一次模拟汽车的简单尝试"""

3 def __init__(self,make,model,year):4 self.make =make5 self.model =model6 self.year =year7 self.odometer_reading =08

9 defget_descriptive_name(self):10 long_name = str(self.year) + " " + self.make + " " +self.model11 returnlong_name.title()12

13 defread_odometer(self):14 print("This car has" + str(self.odometer_reading) + "mile on it.")15

16 defupdate_odomter(self,mileage):17 if mileage >=self.odometer_reading:18 self.odometer_reading =mileage19

20 else:21 print("You can't roll back an odometer!")22

23 defincrement_odometer(self,miles):24 self.odometer_reading +=miles25

26 classElectricCar(Car):27 """电动汽车的独特"""

28

29 def __init__(self,make,model,year):30 """初始化父类的属性"""

31 super().__init__(make,model,year)32

33 #给子类定义属性和方法

34 self.battery_size = 70

35

36 #给子类定义属性和方法

37 defdescribe_battery(self):38 """打印一条描述电瓶容量的消息"""

39 print("This car has a" + str(self.battery_size) + "-KWh battery.")40

41 my_tesla = ElectricCar('tesla','model X',2018)42 print(my_tesla.get_descriptive_name())43 my_tesla.describe_battery()

View Code

执行结果:

1 2018Tesla Model X2 This car has a 70-KWh battery.

1.2、重写父类的方法

如果父类中存在的一个方法完全不适用于子类,那么可以直接在子类中对父类的方法进行重写。

要求子类中重写的方法要与父类的同名,这样代码就不会执行父类方法,而只关注子类的方法

1 classCar():2 --snip--

3

4 deffill_gas_tank():5 """油箱"""

6 print("This car need a gas tank.")7

8 classElectricCar(Car):9 --snip--

10 #重写父类的方法

11 deffill_gas_tank():12 """电动汽车没有油箱"""

13 print("This car doesn't need a gas tank.")

1.3、将实例用作属性

定义一个新类,并且没有任何继承

在子类中,添加一个属性,指向新建的父类;这里是self.battery = Battery()

1 classCar():2 """一次模拟汽车的简单尝试"""

3 def __init__(self,make,model,year):4 self.make =make5 self.model =model6 self.year =year7 self.odometer_reading =08

9 defget_descriptive_name(self):10 long_name = str(self.year) + " " + self.make + " " +self.model11 returnlong_name.title()12

13 defread_odometer(self):14 print("This car has" + str(self.odometer_reading) + "mile on it.")15

16 defupdate_odomter(self,mileage):17 if mileage >=self.odometer_reading:18 self.odometer_reading =mileage19

20 else:21 print("You can't roll back an odometer!")22

23 defincrement_odometer(self,miles):24 self.odometer_reading +=miles25

26

27 #将实例用作属性

28 classBattery():29 def __init__(self, battery_size=70):30 """初始化电瓶的属性"""

31 self.battery_size =battery_size32

33 defdescribe_battery(self):34 """打印一条描述电瓶容量的信息"""

35 print("This car has a" + str(self.battery_size) + "-KWh battery.")36

37

38 classElectricCar(Car):39 """电动汽车的独特"""

40

41 def __init__(self,make,model,year):42 """初始化父类的属性"""

43 super().__init__(make,model,year)44

45 #给子类定义属性和方法

46 #self.battery_size = 70 #新属性

47 #初始化父类的属性,再初始化电动车特有的属性

48 self.battery =Battery()49

50 ##给子类定义属性和方法

51 #def describe_battery(self):

52 #"""打印一条描述电瓶容量的消息"""

53 #print("This car has a " + str(self.battery_size) + "-KWh battery.")

54

55 #重写父类的方法

56 deffill_gas_tank():57 """电动汽车没有油箱"""

58 print("This car doesn't need a gas tank.")59

60

61 my_tesla = ElectricCar('tesla','model X',2018)62 print(my_tesla.get_descriptive_name())63 #my_tesla.describe_battery()

64 my_tesla.battery.describe_battery()

执行结果:

1 2018Tesla Model X2 This car has a70-KWh battery.

继续将实例用作属性

classCar():--snip--#将实例用作属性

classBattery():

--snip--#实例2#打印一条消息,指出电瓶的续航里程

defget_range(self):if self.battery_size == 70:

range= 240

elif self.battery_size == 85:

range= 70msg= "This car can go approximately" +str(range)

msg+= "miles on a full charge."

print(msg)classElectricCar(Car):--snip--

trmy_tesla= ElectricCar('tesla','model X',2018)print(my_tesla.get_descriptive_name())

my_tesla.battery.describe_battery()

my_tesla.battery.get_range()

执行结果:

1 2018Tesla Model X2 This car has a70-KWh battery.3 This car can go approximately240miles on a full charge.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值