python3 多態,綁定方法與非綁定方法
阿新 • • 發佈:2017-07-06
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 多態,綁定方法與非綁定方法