class DefaultConfiguration(object):
def __init__(self):
print("calling DefaultConfiguration.__init__ ......")
class AppConfig(object):
@classmethod
def get(cls):
print("calling AppConfig.get ......")
return DefaultConfiguration()
def do_some_work(config=AppConfig.get()):
print("do some work ......")
The output is:
calling AppConfig.get ......
calling DefaultConfiguration.__init__ ......
------------------------------------------------------------------------------------------------------------------------------------------------------
Python中函數缺省參數的早綁定
Default parameters' early bindings in Python
最近一段時間工作上需要給一些遺留代碼補充單元測試,看到一些代碼中由於缺省參數造成不必要的耦合。例如在導入一些模塊的時候,儘管不需要使用該模塊中的一些函數,卻因爲函數的缺省參數原因需要在導入時運行一些邏輯,造成副作用。這一點在單元測試的時候尤其嚴重。
進一步討論這個問題,根本原因在於模塊化做得不好 - 模塊並不是單一功能的,而且是面向實現編程的,造成了極強的耦合。