[英]what is the recommended approach to initialize a class with many optional properties in Python
我是Python的新手,我正在尋找一種編寫具有許多可選屬性的類的方法,這些屬性可以在單個代碼行中初始化。
到目前為止,我發現可以通過名稱指定init方法的可選參數:
class MyClass():
def __init__(self, param1=None, param2=None, param3=None, param4=None):
self.param1 = param1
self.param2 = param2
self.param3 = param3
self.param4 = param4
初始化看起來像:
o1 = MyClass(param2="someVal", param4="someOtherVal")
這種方法看起來不錯,再加上我認為像IntelliJ這樣的IDE將能夠以這種樣式提供一些代碼完成。
但是,如果我將創建一個復雜的類層次結構,我想知道這是否是正確的方法。 假設MyClass將從MyBaseClass和MyOtherClass繼承,我希望通過MyClass的init方法(或其他方法)初始化所有類的所有屬性。
希望在仍然幫助IDE能夠提供代碼完成的情況下,實現此目標的最佳方法是什么?
謝謝您的幫助。
在其構造函數中具有許多可選參數的類可能是“代碼異味”,因此需要重新設計。 我建議編寫一些參數組類:
class ParamSetA:
def __init__(param2="someVal", param4="someOtherVal"):
self.param2 = param2
self.param4 = param4
class ParamSetB:
def __init__(param3, param4):
self.param3 = param3
self.param4 = param4
class MyClass():
def __init__(self, params):
self.params = params
現在很明顯如何將參數傳遞給其他相關的類:只需傳遞封裝了一組有效參數的整個對象。
這也使驗證更加容易:用一組毫無意義的參數(例如,互斥參數或相關參數)構造MyClass
更加困難。
這個怎么樣?
class Base:
def __init__(self, param1=None, param2=None, param3=None, param4=None):
class Derived(Base):
def __init__(self, param1=None, param2=None, param3=None, param4=None):
super().__init__(**locals())
參考: 獲取傳遞給函數的參數的列表/元組/字典? -您可能還需要使用inspect.getargspec()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.