Python Class factory
Posted on Jun 13, 2016 in Python 程式設計 - 高階 by Amo Chen ‐ 1 min read
一般而已, Python 客製化的 Exception 通常都會這麼做:
class AnException(Exception): pass
class AnOtherExeption(Exception): pass
但其實還可以利用內建函數 type()
這麼做:
AnException = type('AnException', (Exception, ), {})
AnOtherExeption = type('AnOtherExeption', (Exception, ), {})
上述範例,第 1 個參數是類別名稱,第 2 個是繼承的類別,第 3 個是 __dict__
中的預設 attribute 。詳見 type() 說明
而這種特性其實也能夠進一步利用變成 factory 的形式,好比說產生許多行為大部分相同但是類別名稱不一樣的 Class 。譬如,說各種不同廠牌的汽車類別:
class Car(object):
def run(self):
pass
def car_factory(brand_name):
return type('{}Car'.format(brand_name), (Car, ), {'brand_name': brand_name})
FordCar = car_factory('Ford')
print FordCar.brand_name #Ford
print type(FordCar()) #<class '__main__.FordCar'>
BenzCar = car_factory('Benz')
print BenzCar.brand_name #Benz
print type(BenzCar()) #<class '__main__.BenzCar'>
老實說,還蠻潮的XD