使用代碼模擬實物時,你可能會發(fā)現(xiàn)自己給類添加的細(xì)節(jié)越來越多:屬性和方法清單以及文件都越來越長林束。在這種情況下,可能需要將類的一部分作為一個獨立的類提取出來。你可以將大型類拆分成多個協(xié)同工作的小類咨察。這里把 狗狗類做了一個封裝。全部狗狗信息放到doginfo里福青。
再如摄狱,不斷給ElectricCar類添加細(xì)節(jié)時,我們會發(fā)現(xiàn)其中包含很多專門針對汽車電瓶的屬性和方法无午。在這種情況下媒役,我們可將這些屬性和方法提取出來,放到另一個名為Battey的類中宪迟,并將一個Battery實例用作ElectricCar類的一個屬性:
代碼:
# Hello World program in Python
# -- coding: utf-8 --
class Car(object):
? ? 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)+" miles on it."
? ? def update_odometer(self,mileage):
? ? ? ? if mileage>=self.odometer_reading:
? ? ? ? ? ? self.odometer_reading=mileage
? ? ? ? else:
? ? ? ? ? ? print "You can't roll back an odometer!"
class Battery():
? ? def __init__(self,battery_size=70):
? ? ? ? self.battery_size=battery_size
? ? def describe_battery(self):
? ? ? ? print "This car has a "+str(self.battery_size)+"-kwh battery."
class ElectricCar(Car):
? ? def __init__(self,make,model,year):
? ? ? ? super(ElectricCar,self).__init__(make,model,year)
? ? ? ? self.battery=Battery()
my_tesla=ElectricCar('tesla','model s',2016)
print(my_tesla.get_descriptive_name())
my_tesla.battery.describe_battery()