Python基礎(五)-類

創建和使用類

class Dog(): 
    """一次模擬小狗的簡單嘗試"""
    def __init__(self, name, age):
        """初始化屬性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!")

方法__init__() 是一個特殊的方法,每當你根 據Dog 類創建新實例時,Python都會自動運行它。在這個方法的名稱中,開頭和末尾各有兩個下劃線,這是一種約定,旨在避免Python默認方法與普通方法發生名稱衝突。

方法__init__() 定義成了包含三個形參:self 、name 和age 。在這個方法的定義中,形參self 必不可少,還必須位於其他形參的前面。爲何必須在方法定義中包 含形參self 呢?因爲Python調用這個__init__() 方法來創建Dog 實例時,將自動傳入實參self 。每個與類相關聯的方法調用都自動傳遞實參self ,它是一個指向實例本身 的引用,讓實例能夠訪問類中的屬性和方法。我們創建Dog 實例時,Python將調用Dog 類的方法__init__() 。我們將通過實參向Dog() 傳遞名字和年齡;self 會自動傳遞, 因此我們不需要傳遞它。每當我們根據Dog 類創建實例時,都只需給最後兩個形參(name 和age )提供值。

#創建對象
my_dog = Dog('willie', 6)
#訪問屬性my_dog.name  
print("My dog's name is " + my_dog.name.title() + ".") 
#訪問屬性my_dog.age
print("My dog is " + str(my_dog.age) + " years old.")

#訪問對象方法
my_dog.sit()
my_dog.roll_over()



#輸出
My dog's name is Willie.
My dog is 6 years old.
Willie is now sitting.
Willie rolled over!

給屬性指定默認值

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):
         return str(self.year)+" "+self.make.title()+" "+self.model.title()

    def read_odometer(self):
        """打印一條指出汽車裏程的消息"""
        print("This car has " + str(self.odometer_reading) + " miles on it.")

my_new_car = Car('audi', 'a4', 2016)
print(my_new_car.get_descriptive_name())
my_new_car.read_odometer()

#輸出
2016 Audi A4
This car has 0 miles on it.

修改屬性的值

my_new_car = Car('audi', 'a4', 2016)
print(my_new_car.get_descriptive_name())

my_new_car.odometer_reading = 23
my_new_car.read_odometer()

#輸出
2016 Audi A4
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):
         return str(self.year)+" "+self.make.title()+" "+self.model.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', 'a4', 2016)
print(my_new_car.get_descriptive_name())

my_new_car.update_odometer(23)
my_new_car.read_odometer()

#輸出
2016 Audi A4
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):
         return str(self.year)+" "+self.make.title()+" "+self.model.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

#繼承Car
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 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.

重寫父類的方法

可在子類中定義一個這樣的方法,即它與要重寫的父類方法同名

將實例用作屬性

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', 2016)
print(my_tesla.get_descriptive_name())
my_tesla.battery.describe_battery()

#輸出
2016 Tesla Model S
This car has a 70-kWh battery.

導入類

導入單個類

#Car 是Car類的存放文件car.py
from car import Car

my_new_car = Car('audi', 'a4', 2016)
print(my_new_car.get_descriptive_name())
my_new_car.odometer_reading = 23
my_new_car.read_odometer()

#輸出
2016 Audi A4
This car has 23 miles on it.

從一個模塊中導入多個類

#從car.py文件裏導入Car, ElectricCar類
from car import Car, ElectricCar

導入整個模塊 (非類裏的包括屬性、方法)

import car 

導入模塊中的所有類

from module_name import *

在一個模塊中導入另一個模塊

electric_car.py

"""一組可用於表示電動汽車的類"""
from car import Car

class Battery():
--snip--
class ElectricC

car.py

"""一個可用於表示汽車的類"""

class Car():
--snip--

my_cars.py

from car import Car
from electric_car import ElectricCar

my_beetle = Car('volkswagen', 'beetle', 2016)
print(my_beetle.get_descriptive_name())

my_tesla = ElectricCar('tesla', 'roadster', 2016)
print(my_tesla.get_descriptive_name())

#輸出
2016 Volkswagen Beetle
2016 Tesla Roadster

Python標準庫

Python標準庫 是一組模塊,安裝的Python都包含它。你現在對類的工作原理已有大致的瞭解,可以開始使用其他程序員編寫好的模塊了。可使用標準庫中的任何函數和類,爲此 只需在程序開頭包含一條簡單的import 語句。

from collections import OrderedDict
from random import randint
x = randint(1, 6)

類編碼風格

類名應採用駝峯命名法 ,即將類名中的每個單詞的首字母都大寫,而不使用下劃線。實例名和模塊名都採用小寫格式,並在單詞之間加上下劃線。

在類定義後面包含一個文檔字符串。這種文檔字符串簡要地描述類的功能,

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章