【Python】09 類

前言:面向?qū)ο缶幊?。類是一大類對象都有的通用行為?;陬悇?chuàng)建對象時,每個對象都自動具備這種通用行為。根據(jù)類來創(chuàng)建對象被稱為實(shí)例化。

9.1 創(chuàng)建和使用類

類幾乎可以模擬任何東西

9.1.1 創(chuàng)建dog類

class Dog(): #首字母大寫的名稱
    """一次模擬小狗的簡單嘗試"""

    def _init_(self,name,age):  #類中的函數(shù)稱為方法
        """初始化屬性name和age"""
        self.name = name # 可以通過實(shí)例訪問的變量稱為屬性
        self.age = age
        
    def sit(self):
        """模擬小狗被命令蹲下"""
        print(self.name.title() + ' is now sitting.') 
    
    def roll_over(self):
        """模擬小狗被命令打滾"""
        print(self.name.title() + ' is rolled over!')

9.1.2 根據(jù)類創(chuàng)建實(shí)例

class Dog(): #首字母大寫的名稱
    """一次模擬小狗的簡單嘗試"""

    def __init__(self,name,age):  #類中的函數(shù)稱為方法 init方法前后都有2個下劃線
        """初始化屬性name和age"""
        self.name = name # 可以通過實(shí)例訪問的變量稱為屬性
        self.age = age
        
    def sit(self):
        """模擬小狗被命令蹲下"""
        print(self.name.title() + ' is now sitting.') 
    
    def roll_over(self):
        """模擬小狗被命令打滾"""
        print(self.name.title() + ' is rolled over!')
        
my_dog = Dog('willie',6) #實(shí)例1
print("my dog's name is  " + my_dog.name.title() + ".") # 訪問屬性,使用句點(diǎn)表示法
print("my dog is  " + str(my_dog.age) + " years old.")

my_dog.sit()#調(diào)用方法,句點(diǎn)表示法

your_dog = Dog("lucy",3)#實(shí)例2
print("your dog's name is  " + your_dog.name.title() + ".") # 訪問屬性,使用句點(diǎn)表示法
print("your dog is  " + str(your_dog.age) + " years old.")

your_dog.roll_over()

9.2 使用類和實(shí)例

9.2.1 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 = str(self.year) + " " + self.make + " " + self.model
        return long_name.title()
    
my_new_car = Car("audi",'a4',2016)
print(my_new_car.get_descriptive_name())

9.2.2 給屬性指定默認(rèn)值

類的每個屬性都必須有初始值。

class Car():
    def __init__(self,make,model,year):
        """初始化描述汽車屬性"""
        self.make = make
        self.model = model
        self.year = year
        self.odometer_reading = 0  #添加屬性,并設(shè)置初始值總是0

    def get_descriptive_name(self):
        """返回整潔的描述性信息"""
        long_name = str(self.year) + " " + self.make + " " + self.model
        return long_name.title()
    
    def read_odometer(self): #定義方法
        """打印一條指出汽車?yán)锍痰南?""
        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()

9.2.3 修改屬性的值

  1. 直接修改屬性的值:通過實(shí)例直接訪問
class Car():
   def __init__(self,make,model,year):
       """初始化描述汽車屬性"""
       self.make = make
       self.model = model
       self.year = year
       self.odometer_reading = 0  #添加屬性,并設(shè)置初始值總是0

   def get_descriptive_name(self):
       """返回整潔的描述性信息"""
       long_name = str(self.year) + " " + self.make + " " + self.model
       return long_name.title()
   
   def read_odometer(self): #定義方法
       """打印一條指出汽車?yán)锍痰南?""
       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.odometer_reading = 23 #通過實(shí)例直接修改屬性的值
my_new_car.read_odometer()
  1. 通過方法修改屬性的值
class Car():
    def __init__(self,make,model,year):
        """初始化描述汽車屬性"""
        self.make = make
        self.model = model
        self.year = year
        self.odometer_reading = 0  #添加屬性,并設(shè)置初始值總是0

    def get_descriptive_name(self):
        """返回整潔的描述性信息"""
        long_name = str(self.year) + " " + self.make + " " + self.model
        return long_name.title()
    
    def read_odometer(self): #定義方法
        """打印一條指出汽車?yán)锍痰南?""
        print("this car has "  + str(self.odometer_reading)+ " miles on it.")
    
    def update_odometer(self,mileage):#通過方法修改屬性的值
        """將里程表讀數(shù)設(shè)置為指定的值"""
        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()
  1. 通過方法對屬性的值進(jìn)行遞增
class Car():
    def __init__(self,make,model,year):
        """初始化描述汽車屬性"""
        self.make = make
        self.model = model
        self.year = year
        self.odometer_reading = 0  #添加屬性,并設(shè)置初始值總是0

    def get_descriptive_name(self):
        """返回整潔的描述性信息"""
        long_name = str(self.year) + " " + self.make + " " + self.model
        return long_name.title()
    
    def read_odometer(self): #定義方法
        """打印一條指出汽車?yán)锍痰南?""
        print("this car has "  + str(self.odometer_reading)+ " miles on it.")
    
    def update_odometer(self,mileage):#通過方法修改屬性的值
        """將里程表讀數(shù)設(shè)置為指定的值"""
        self.odometer_reading = mileage 
        
    def increment_odometer(self,miles): #屬性值遞增特定的量
        """將里程表讀數(shù)增加指定的量"""
        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()

9.3 繼承

如果要編寫的類時另一個現(xiàn)成的類的特殊版本,可使用繼承。一個類繼承另一個類時,自動獲得另一個類的屬性和方法。原有的類稱為父類,而新類稱為子類。子類繼承了父類的屬性和方法,還可以定義自己的屬性和方法。

9.3.1 子類的方法init()

class Car(): #創(chuàng)建子類時,父類必須包含在當(dāng)前文件中,且位于子類的前面
    def __init__(self,make,model,year):
        """初始化描述汽車屬性"""
        self.make = make
        self.model = model
        self.year = year
        self.odometer_reading = 0  #添加屬性,并設(shè)置初始值總是0
        
    def get_descriptive_name(self):
        """返回整潔的描述性信息"""
        long_name = str(self.year) + " " + self.make + " " + self.model
        return long_name.title()
    
    def read_odometer(self): #定義方法
        """打印一條指出汽車?yán)锍痰南?""
        print("this car has "  + str(self.odometer_reading)+ " miles on it.")
    
    def update_odometer(self,mileage):#通過方法修改屬性的值
        """將里程表讀數(shù)設(shè)置為指定的值"""
        self.odometer_reading = mileage 
        
    def increment_odometer(self,miles): #屬性值遞增特定的量
        """將里程表讀數(shù)增加指定的量"""
        self.odometer_reading += miles
        
class ElectricCar(Car): #定義子類時,必須在括號內(nèi)指定父類的名稱
    
    def __init__(self,make,model,year):
        """初始化父類的屬性"""
        super().__init__(make,model,year) #super()是一個特殊的函數(shù),用于關(guān)聯(lián)父類和子類(父類也稱superclass)
        
my_tesla = ElectricCar('tesla','model s', 2016)
print(my_tesla.get_descriptive_name())

9.3.3 給子類定義屬性和方法

添加區(qū)分子類和父類所需的新屬性和方法

class Car(): #創(chuàng)建子類時,父類必須包含在當(dāng)前文件中,且位于子類的前面
    def __init__(self,make,model,year):
        """初始化描述汽車屬性"""
        self.make = make
        self.model = model
        self.year = year
        self.odometer_reading = 0  #添加屬性,并設(shè)置初始值總是0
        
    def get_descriptive_name(self):
        """返回整潔的描述性信息"""
        long_name = str(self.year) + " " + self.make + " " + self.model
        return long_name.title()
    
    def read_odometer(self): #定義方法
        """打印一條指出汽車?yán)锍痰南?""
        print("this car has "  + str(self.odometer_reading)+ " miles on it.")
    
    def update_odometer(self,mileage):#通過方法修改屬性的值
        """將里程表讀數(shù)設(shè)置為指定的值"""
        self.odometer_reading = mileage 
        
    def increment_odometer(self,miles): #屬性值遞增特定的量
        """將里程表讀數(shù)增加指定的量"""
        self.odometer_reading += miles
        
class ElectricCar(Car): #定義子類時,必須在括號內(nèi)指定父類的名稱
    
    def __init__(self,make,model,year):
        """初始化父類的屬性"""
        super().__init__(make,model,year) #super()是一個特殊的函數(shù),用于關(guān)聯(lián)父類和子類(父類也稱superclass)
        self.battery_size = 70 #給子類添加有別有父類的屬性
    
    def describe_battery(self):
        print("this car has a " + str(self.battery_size) + "-keh battery.")
        
my_tesla = ElectricCar('tesla','model s', 2016)
print(my_tesla.get_descriptive_name())
my_tesla.describe_battery()

9.3.4 重寫父類的方法

在子類中定義與父類方法同名的方法。

9.3.5 將實(shí)例用作屬性

可以將類的一部分作為一個獨(dú)立的類提取出來,將大類拆成多個協(xié)同工作的小類

class Car(): #創(chuàng)建子類時,父類必須包含在當(dāng)前文件中,且位于子類的前面
    def __init__(self,make,model,year):
        """初始化描述汽車屬性"""
        self.make = make
        self.model = model
        self.year = year
        self.odometer_reading = 0  #添加屬性,并設(shè)置初始值總是0
        
    def get_descriptive_name(self):
        """返回整潔的描述性信息"""
        long_name = str(self.year) + " " + self.make + " " + self.model
        return long_name.title()
    
    def read_odometer(self): #定義方法
        """打印一條指出汽車?yán)锍痰南?""
        print("this car has "  + str(self.odometer_reading)+ " miles on it.")
    
    def update_odometer(self,mileage):#通過方法修改屬性的值
        """將里程表讀數(shù)設(shè)置為指定的值"""
        self.odometer_reading = mileage 
        
    def increment_odometer(self,miles): #屬性值遞增特定的量
        """將里程表讀數(shù)增加指定的量"""
        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.")
        
    def get_range(self):
        if self.battery_size == 70:
            range = 240
        elif self.battery_size == 85:
            range - 270
            
        msg = "this car can go approximately "+str(range)
        msg += "miles on a full charge"
        print(msg)
    
    
class ElectricCar(Car): #定義子類時,必須在括號內(nèi)指定父類的名稱
    
    def __init__(self,make,model,year):
        """初始化父類的屬性"""
        super().__init__(make,model,year) #super()是一個特殊的函數(shù),用于關(guān)聯(lián)父類和子類(父類也稱superclass)
        self.battery = Battery()
        
my_tesla = ElectricCar('tesla','model s', 2016)
print(my_tesla.get_descriptive_name())
my_tesla.battery.describe_battery()
my_tesla.battery.get_range()

9.3.6 模擬實(shí)物

從較高的邏輯層面而不是語法層面考慮。應(yīng)該考慮如何用代碼來表示實(shí)物?,F(xiàn)實(shí)世界的建模沒有對錯之分,有的方法效率更高。

9.4 導(dǎo)入類

9.4.1 導(dǎo)入單個類

將類存儲在獨(dú)立的模塊中,再導(dǎo)入,保持主程序的征集

9.4.2 在一個模塊中存儲多個類

9.4.3 從一個模塊中導(dǎo)入多個類

from module_name import class_name1,class_name2 #逗號隔開

9.4.5 導(dǎo)入模塊中的所有類

from module_name import *

9.5 Python 標(biāo)準(zhǔn)庫

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 這是16年5月份編輯的一份比較雜亂適合自己觀看的學(xué)習(xí)記錄文檔,今天18年5月份再次想寫文章,發(fā)現(xiàn)簡書還為我保存起的...
    Jenaral閱讀 3,186評論 2 9
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,697評論 1 32
  • 一、Python簡介和環(huán)境搭建以及pip的安裝 4課時實(shí)驗(yàn)課主要內(nèi)容 【Python簡介】: Python 是一個...
    _小老虎_閱讀 6,363評論 0 10
  • 要點(diǎn): 函數(shù)式編程:注意不是“函數(shù)編程”,多了一個“式” 模塊:如何使用模塊 面向?qū)ο缶幊蹋好嫦驅(qū)ο蟮母拍?、屬性?..
    victorsungo閱讀 1,707評論 0 6
  • 春的腳步不慌不忙,踩著和煕與涼清的節(jié)奏,抵御著寒冷與躁動。沒有誰知道她什么時候會放棄,徒留下紈绔的夏日等待著...
    俗子耳閱讀 441評論 0 2

友情鏈接更多精彩內(nèi)容