第 9 章主要講的類,這個以前在 shell 中沒遇到過python
一直運用的也不是很溜,不過多敲多練,應該會有進步吧shell
建立類和使用類ruby
建立一個 Dog 類dom
---------------------------------------------------------------------ide
class Dog():
def __init__(self, name, age):
self.name = name
self.age = age
def sit(self):
print(self.name.title() + " is now sitting.")
def roll_over(self):
print(self.name.title() + " rolled over!")函數
my_dog = Dog('willie', 6)
my_dog.sit()
my_dog.roll_over() spa
print("My dog's name is " + my_dog.name.title() + ".")
print("My dog is " + str(my_dog.age) + " years old.")繼承
------------------------------------------------------------------------ip
Willie is now sitting.
Willie rolled over!
My dog's name is Willie.
My dog is 6 years old.rem
建立多個實例
------------------------------------------------------------------------------
class Dog():
def __init__(self, name, age):
self.name = name
self.age = age
def sit(self):
print(self.name.title() + " is now sitting.")
def roll_over(self):
print(self.name.title() + " rolled over!")
my_dog = Dog('willie', 6)
your_dog = Dog('lucy', 3)
print("My dog's name is " + my_dog.name.title() + ".")
print("My dog is " + str(my_dog.age) + " years old.")
my_dog.sit()
print("\nYour dog's name is " + your_dog.name.title() + ".")
print("Your dog is " + str(your_dog.age) + " years old.")
your_dog.sit()
------------------------------------------------------------------------------
My dog's name is Willie.
My dog is 6 years old.
Willie is now sitting.
Your dog's name is Lucy.
Your dog is 3 years old.
Lucy is now sitting.
Car 類練習
------------------------------------------------------------------------------------
class Car():
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
def get_descriptive_name(self):
long_name = self.year + ' ' + self.make + ' ' + str(self.model)
return long_name.title()
my_new_car = Car('audi', 24, '2016')
print(my_new_car.get_descriptive_name())
------------------------------------------------------------------------------------
2016 Audi 24
添加屬性默認值
-------------------------------------------------------------------------------------------
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 + ' ' + str(self.model)
return long_name.title()
def read_odometer(self):
print("This car has " + str(self.odometer_reading) + " miles on it.")
my_new_car = Car('audi', '24', '2016')
print(my_new_car.get_descriptive_name())
my_new_car.read_odometer()
-------------------------------------------------------------------------------------------
2016 Audi 24
This car has 0 miles on it.
修改屬性的值
-------------------------------------------------------------------------------------------
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 + ' ' + str(self.model)
return long_name.title()
def read_odometer(self):
print("This car has " + str(self.odometer_reading) + " miles on it.")
my_new_car = Car('audi', '24', '2016')
print(my_new_car.get_descriptive_name())
my_new_car.odometer_reading = 23
my_new_car.read_odometer()
-------------------------------------------------------------------------------------------
2016 Audi 24
This car has 23 miles on it.
經過方法修改屬性的值
-------------------------------------------------------------------------------------------
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 + ' ' + str(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):
self.odometer_reading = mileage
my_new_car = Car('audi', '24', '2016')
print(my_new_car.get_descriptive_name())
my_new_car.update_odometer(45)
my_new_car.read_odometer()
-------------------------------------------------------------------------------------------
2016 Audi 24
This car has 45 miles on it.
經過方法對屬性的值進行遞增
-------------------------------------------------------------------------------------------
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 + ' ' + str(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!")
def increment_odometer(self, miles):
self.odometer_reading += miles
my_used_car = Car('subaru', 'outback', 2013)
print(my_used_car.get_descriptive_name())
my_used_car.update_odometer(23500)
my_used_car.read_odometer()
my_used_car.increment_odometer(100)
my_used_car.read_odometer()
-------------------------------------------------------------------------------------------
2013 Subaru Outback
This car has 23500 miles on it.
This car has 23600 miles on it.
繼承 : 子類的方法 __init__( )
父類必須包含在當前文件中,且位於子類前面
定義子類時,括號中必須指定父類的名稱
super( ) 是一個特殊函數,將父類和子類關聯起來,讓 ElectricCar 實例包含父類的全部屬性
父類也稱爲超類。
-------------------------------------------------------------------------------------------
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 + ' ' + str(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!")
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 s', 2016)
print(my_tesla.get_descriptive_name())
-------------------------------------------------------------------------------------------
2016 Tesla Model S
給子類定義屬性和方法
-------------------------------------------------------------------------------------------
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 + ' ' + str(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!")
def increment_odometer(self, miles):
self.odometer_reading += miles
class ElectricCar(Car):
def __init__(self, make, model, year):
super().__init__(make, model, year)
self.battery_size = 70
def describe_battery(self):
print("This car has a " + str(self.battery_size) + "-kWh battery.")
my_tesla = ElectricCar('tesla', 'model s', 2016)
print(my_tesla.get_descriptive_name())
my_tesla.describe_battery()
-------------------------------------------------------------------------------------------
2016 Tesla Model S
This car has a 70-kWh battery.
重寫父類的方法
假設 Car 類中有一個名爲 fill_gas_tank( ) 的函數,可是它對電動汽車毫無心義
能夠在子類中重寫該函數,Python就會運轉子類中的代碼,
並且還會保留父類中的其餘函數
------------------------------------------------------------
def fill_gas_tank():
print("This car doesn't need a gas tank")
------------------------------------------------------------
將實例用做屬性
新建一個 class Battery() 的類
在 class ElectricCar(Car) 類中指定 class Battery()
-------------------------------------------------------------------------------------------
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 + ' ' + str(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!")
def increment_odometer(self, miles):
self.odometer_reading += miles
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().__init__(make, model, year)
self.battery = Battery()
my_tesla = ElectricCar('tesla', 'model s', 'year')
print(my_tesla.get_descriptive_name())
my_tesla.battery.describe_battery()
-------------------------------------------------------------------------------------------
2016 Tesla Model S
This car has a 70-kWh battery.
導入單個類
my_car.py導入car.py中的 Car 類
car.py 文件內容以下
-------------------------------------------------------------------------------------------
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 + ' ' + str(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!")
def increment_odometer(self, miles):
self.odometer_reading += miles
-------------------------------------------------------------------------------------------
my_car.py 文件內容以下
-----------------------------------------------------------------
from car import Car
my_new_car = Car('audi', '24', 2016)
print(my_new_car.get_descriptive_name())
my_new_car.odometer_reading = 23
導入模塊中的類
從 car.py 文件中導入 ElectricCar 類
-------------------------------------
from car import ElectricCar
-------------------------------------
導入模塊中的多個類
------------------------------------------
from car import ElectricCar, Car
------------------------------------------
導入整個模塊
直接導入 car.py 文件中所有函數
------------------------------------------
import car
my_beetle = car.Car(‘volkswagen’, ‘beetle’)
------------------------------------------
Python標準庫
collections 模塊中的 OrderedDict 類
-------------------------------------------------------------------------------------------
from collections import OrderedDict
favorite_languages = OrderedDict()
favorite_languages['jen'] = 'python'
favorite_languages['sarah'] = 'c'
favorite_languages['edward'] = 'ruby'
favorite_languages['phil'] = 'python'
for name, language in favorite_languages.items():
print(name.title() + "'s favorite language is " + language.title() + ".")
-------------------------------------------------------------------------------------------
Jen's favorite language is Python.
Sarah's favorite language is C.
Edward's favorite language is Ruby.
Phil's favorite language is Python.