1. 程式人生 > >python中的多型,內建方法和屬性的使用以及設計模式

python中的多型,內建方法和屬性的使用以及設計模式

基類

一,新式類,舊式類

新式類 :後面是以object結尾的
舊式類(經典類)
基類:定義類時,後面的括號後面寫上object,會自動繼承object類

多型

1.封裝:根據職責將屬性和方法封裝到一個抽象的類中
    定義類的準則
2.繼承:實現程式碼的重用,相同的程式碼不需要重複的編寫
    設計類的技巧
    子類針對自己特有的需求,編寫特定的程式碼
3.多型
    不同的子類(這是之前提到的繼承的知識)
    物件呼叫相同的方法,產生不同的執行結果

class Dog(object):
    def __init__(self,name):
        self.name = name
    def game(self):
        print '%s 蹦蹦跳跳的玩。。' % self.name

class Xiaotianquan(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()

# 1.建立一個狗物件
#wangcai = Dog('旺財')
wangcai = Xiaotianquan('飛天神狗')
# 2.建立一個人物件
xiaoming = Person('小明')
# 讓小明和狗玩
xiaoming.game_with_dog(wangcai)

內建方法和屬性

# _*_ coding:utf-8 _*_
"""
file: __del__方法.py
date: 2018-07-17 11:17 AM
author: westos-dd
desc:
    
__del__方法:
在python中
當使用類名()建立物件時,為物件分配完空間後,
自動呼叫__init__方法
當一個物件被從記憶體中銷燬前(把這個物件從記憶體中刪除掉),
會自動呼叫__del__方法

應用場景
__del__如果希望在物件被銷燬前,再做一些事情,可以考慮一下__del__方法
"""
# _*_ coding:utf-8 _*_
"""
file: __str__方法.py
date: 2018-07-17 11:20 AM
author: westos-dd
desc:
    在python中,使用python輸出物件變數,預設情況下,
    會輸出這個變數引用的物件是由哪>一個類建立的物件,
    以及在記憶體中的地址(十六進位制表示)
    如果在開發中,希望使用print輸出物件變數時,
    能夠列印自定義的內容,就可以利用__str__這個內建方法了

"""

設計模式

# _*_ coding:utf-8 _*_
"""
file: 01.py
date: 2018-07-22 3:03 PM
author: westos-dd
desc:
    

"""
class MusicPlayer(object):
    instance = None
    init_flag = False
    def __new__(cls, *args, **kwargs):
    # 第一個引數 cls:哪一個類呼叫,就傳遞哪一個類
    # 第二個引數 *args:多值引數
    # 第三個引數 **kwargs:多值的字典引數
    # 建立物件的時候,new方法會被自動呼叫
    # 重寫了父類的方法
       if cls.instance is None:
           cls.instance = object.__new__(cls)
       return cls.instance
    def __init__(self):
        if MusicPlayer.init_flag:
            return
        print '初始化播放器'
        MusicPlayer.init_flag = True
player1 = MusicPlayer()
print player1

player2 =MusicPlayer()
print player2