所以我試圖創建一個帶有初始化方法的類,該類需要獲取正在創建的物件的型別,以便正確設定 init 引數的默認值。
為了給出一個具體的代碼示例,假設我有以下類:
def __init__(self, foo, bar=type(self).some_class_variable, ham=type(self).some_other_class_variable):
self.foo = foo
self.bar = bar
self.ham = self.some_function(ham)
這是我正在尋找的功能,但我的 IDE 說的"self" is not defined是我可以理解的,因為self尚未實體化。所以我的問題是我將如何正確實施?我不想在我目前擁有的地方“硬編碼”型別別,type(self)因為此類的子類可能有自己的值some_class_variable, some_other_class_variable并且我希望這些子類使用與其型別相對應的類變數。
我的解決方案需要在 Python 3.6 和 Python 3.7 中作業,但如果可能的話,我真的希望找到一個適用于 Python 3.6 及更高版本的所有版本的解決方案。
uj5u.com熱心網友回復:
我認為你應該把它放在正文中,而不是引數中。
def __init__(self, foo):
self.foo = foo
self.bar = type(self).some_class_variable
self.ham = self.some_function(type(self).some_other_class_variable)
編輯:如果值為默認值,您可以執行以下操作:
default_value = 'default pls'
def __init__(self, foo, bar=default_value, ham=default_value):
self.foo = foo
if default_value == bar:
self.bar = type(self).some_class_variable
if default_value == ham:
self.ham = self.some_function(type(self).some_other_class_variable)
uj5u.com熱心網友回復:
類名尚未系結,因為此時類尚未初始化。請參閱此答案,它更深入地解釋了這一點。
解決這個問題的一種方法,雖然不是那么好,是為變數創建 setter 方法,并在實體初始化后設定它們,如下所示:
class Example:
def __init__(self, foo):
self.foo = foo
self.bar = None
self.ham = None
def set_bar(self, bar):
self.bar = bar
def set_ham(self, ham):
self.ham = ham
您可以更進一步,使用簡單的 if 陳述句或通過 python 'typing'驗證這些屬性的型別。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/394434.html
下一篇:嵌套例外是org.hibernate.exception.SQLGrammarException:couldnotexecutequery]根本原因java.sql.SQLException:Colu
