1. 程式人生 > >python3 多態,綁定方法與非綁定方法

python3 多態,綁定方法與非綁定方法

int 調用 工具 stat sof round 類的方法 nim 抽象

多態:同一種事物的不同形態(一個抽象類有多個子類,因而多態的概念依賴於繼承)

1. 序列類型有多種形態:字符串,列表,元組。

2. 動物有多種形態:人,狗,豬

多態性:多態性是指具有不同功能的函數可以使用相同的函數名,這樣就可以用一個函數名調用不同功能的函數。

多態性的例子:obj具有多態性

# 以下例子可以概括:多態性就是一個接口(函數func()),多種實現(f.func())
import
abc class Animal(metaclass=abc.ABCMeta): @abc.abstractmethod def talk(self): pass
class People(Animal): def talk(self): print(say hello) class Pig(Animal): def talk(self): print(哼哼哼) class Dog(Animal): def talk(self): print(汪汪汪) p1=People() p2=Pig() p3=Dog() def talk(obj):  # 不同的實例化對象obj調用talk()函數,結果不同 obj.talk() talk(p1) talk(p2) talk(p2)

綁定方法:綁定給誰就是給誰用的

綁定到對象的方法:
定義:凡是在類中定義的函數(沒有被任何裝飾器修飾),都是綁定給對象的,
給誰用:給對象用
特點:obj.bar() 自動把obj當做第一個參數傳入,因為bar中的邏輯就是要處理obj


綁定到的方法:
定義:在類中定義的,被classmethod裝飾的函數就是綁定到類的方法
給誰用:給類用
特點:類.class_method() 自動把類當做第一個參數傳入,因為class_method中的邏輯就是要處理類
class People:
    def __init__(self,name):
        self.name = name
    
def bar(self): print(---,self.name) @classmethod def func(cls): print(cls) f = People(egon) print(People.func) # 綁定給類 print(f.bar) #綁定給對象的 People.func()

非綁定方法:用staticmethod裝飾器裝飾的方法

非綁定方法,就是一個函數,就是一個工具而已,不需要類,也不需對象

import hashlib
import time
class MySQL:
    def __init__(self,host,port):
        self.id=self.create_id()
        self.host=host
        self.port=port
    @staticmethod
    def create_id(): #就是一個普通工具
        m=hashlib.md5(str(time.clock()).encode(utf-8))
        return m.hexdigest()


print(MySQL.create_id) #<function MySQL.create_id at 0x0000000001E6B9D8> #查看結果為普通函數
conn=MySQL(127.0.0.1,3306)
print(conn.create_id) #<function MySQL.create_id at 0x00000000026FB9D8> #查看結果為普通函數

python3 多態,綁定方法與非綁定方法