抱歉,如果整個 python 代碼不好。我仍然在學習。
我想要做的是我有一些共享很多方法的類。基本上,這些類僅在某些領域有所不同。當我創建這些類之一的物件時,我希望在斷言中使用用于創建的資料,以查看創建的物件是否具有預期的資料。每個類的預期資料不同,但每個類的所有物件都相同(即,它是類屬性)。
我看到以下代碼在 IDE ("") 中被標記為錯誤:
class OperatingSystem:
def __init__(self, my_param):
my_os = my_param["os"]
assert my_os == self.os_name
class Win11(OperatingSystem):
os_name = "Windows 11"
class Win10(OperatingSystem):
os_name = "Windows 10"
我認為IDE試圖通過“未決議的屬性參考(os_name)”告訴我的是,在__init__設定類變數之前呼叫了父類。因此,當我試圖獲取類變數(父類的 init 方法)時,該資料還不存在,這肯定會失敗。
但是,從邏輯上講,資料是已知的。所以,我應該有一種方法可以隨時提供它。當然,我可以將常量放在父類中或之上——但我想給類賦予它們自己的屬性,并且做一些更面向物件的事情 :)
- 例如:
Win11.os_name即使在父類的 init 內也能正常作業...... - 試過了
self.__class__.os_name- 仍未解決
uj5u.com熱心網友回復:
你快到了。問題是基類OperatingSystem沒有設定os_name,所以代碼如下:
os = OperatingSystem({'os': 'Windows'})
嘗試讀取時會失敗self.os_name。
解決此問題的兩種方法:
告訴Python這
OperatingSystem是一個抽象基類,這意味著它不能直接創建實體;只有它的子類可以創建實體:from abc import ABC class OperatingSystem(ABC): ...os_name在基類中設定:class OperatingSystem(ABC): os_name = "A Generic OS" ...
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/429043.html
標籤:python-3.x 班级 目的 哎呀 在里面
下一篇:springboot:方法addProduct的引數0需要一個找不到的“java.lang.String”型別的bean
