1. 程式人生 > >Python教程8

Python教程8

Python教程8

  1.多型

# -*-coding:utf-8-*-
"""
1.封裝:根據職責將屬性和方法封裝到一個抽象的類中
2.繼承:實現程式碼重用,相同的程式碼不需要重複編寫
3.多型:不同的子類物件呼叫相同的父類方法,產生不同的執行結果
(多型可以增加程式碼的靈活度,以繼承和重寫父類方法為前提,是呼叫方法的技巧
不影響到類的內部設計)

"""


class Dog(object):
    def __init__(self, name):
        self.name = name

    def game(self):
        print("%s 蹦蹦跳跳的玩耍
" % self.name) class XiaoTianDog(Dog): def game(self): print("%s 飛到天上去玩耍" % self.name) class Person(object): def __init__(self, name): self.name = name def game_with_dog(self, dog): print("%s 和%s 一起玩耍----" % (self.name, dog.name)) dog.game() # 建立狗物件
# waicai =Dog("旺財") waicai = XiaoTianDog("旺財1") # 建立人物件 xm = Person("小明") # 呼叫和人玩的方法 xm.game_with_dog(waicai) """ 術語: 創建出來的物件叫做類的實列 建立物件的動作叫例項化 物件的屬性叫做例項屬性 物件的呼叫方法叫做例項方法 兩個說明: 1.每個物件都有自己獨立的記憶體空間,儲存各種不同的屬性 2.每個物件的方法,在記憶體中只有一份, 在呼叫方法時,需要把物件的引用傳遞到方法的內部 """ # 類物件 """ 類時一個特殊的物件,程式執行時,類同樣會載入到記憶體。類物件在記憶體中只有一份, 使用一個類可以建立很多個物件例項,類物件還可以擁有自己的屬性和方法。 類屬性就是給類物件中定義的屬性,通常用來記錄這個類的相關特徵,類屬性不會用於記錄劇吐的物件特徵
""" # 例項,定義一個工具類,每件工具都有自己的name,需求,指定使用這個類,建立多少個工具物件 class Tool(object): # 使用賦值語句定義類的屬性 count = 0 def __init__(self, name): self.name = name Tool.count += 1 # 每次呼叫初始化方法都加1 tool1 = Tool("斧頭") print(Tool.count) tool2 = Tool("榔頭") tool3 = Tool("扳手") print(Tool.count) print("----屬性獲取機制----") print(Tool.count) # 推薦 print("工具物件的總數: %d" % tool1.count) # (不推薦) print("工具物件的總數: %d" % tool3.count) # (不推薦) # 注意下三行 tool3.count = 99 # 在物件中找不到count屬性,則會自動新增一個。和類屬性不一樣 print("工具物件的總數: %d" % tool3.count) print("=====> %d" % Tool.count) """ 類方法: 類方法需要修飾器@classmethod來標識 類方法的第一個引數是cls """ class Tool1(object): count1 = 10 @classmethod # 建立類方法,方法上方使用@classmethod def show_tool_count(cls): print("工具物件的數量%d" % cls.count1) def __init__(self, name): self.name1 = name Tool1.count1 += 1 toola = Tool1("斧頭") toola = Tool1("斧頭1") Tool1.show_tool_count() # 呼叫類方法 """ 靜態方法: 在開發時,如果需要在類中封裝一個方法: 1.不需要訪問實列屬性或者呼叫例項方法 2.不需要訪問類的屬性或者呼叫類的方法 可以把方法封裝成一個靜態的方法 """ class Dog1(object): @staticmethod # 定義靜態方法,在方法上使用@staticmethod def run(): # 注意靜態方法沒有引數 print("小狗要跑跑....") # dog1 = Dog1() #呼叫靜態方法可以不建立物件 Dog1.run()