Python編程入門到實踐 - 筆記( 9 章)


第 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.

相關文章
相關標籤/搜索