簡體   English   中英

在Python中使用許多可選屬性初始化類的推薦方法是什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM