在以下示例中,list1屬性P表示 A 的實體串列。
class A:
value1: str
class B(A):
value2: str
class P:
list1: List[A]
我想要的是在變數中保留一個子類A(不是 的實體A)的串列list1。有沒有辦法在python中做到這一點?
uj5u.com熱心網友回復:
我嘗試從這里的第一個答案復制:如何找到一個給定名稱的類的所有子類?:
class klass():
pass
class popo(klass):
pass
class pepe(klass):
pass
class P():
def get_all_subclasses(self, cls):
subclass_list = []
def recurse(classe):
for subclass in classe.__subclasses__():
subclass_list.append(subclass)
recurse(subclass)
recurse(cls)
return list(set(subclass_list))
a = P()
print(a.get_all_subclasses(klass),'\n')
print(type(a.get_all_subclasses(klass)),'\n')
class papa(klass):
pass
class coco(popo):
pass
print(a.get_all_subclasses(klass),'\n')
輸出:
[<class '__main__.popo'>, <class '__main__.pepe'>]
<class 'list'>
[<class '__main__.papa'>, <class '__main__.popo'>, <class '__main__.pepe'>, <class '__main__.coco'>]
或者 :
class klass:
pass
class popo(klass):
pass
class pepe(klass):
pass
class P:
def __init__(self, classez):
self.list1 = []
self.get_all_subclasses(classez)
pass
def get_all_subclasses(self, cls):
def recurse(classe):
for subclass in classe.__subclasses__():
self.list1.append(subclass)
recurse(subclass) # necessarioo per avere coco nella lista
recurse(cls)
self.list1 = list((self.list1))
return self.list1
a = P(klass)
print(a.list1, "\n")
print(type(a.list1), "\n")
class papa(klass):
pass
class coco(popo):
pass
a = P(klass)
print(a.list1)
我也明白:
[<class '__main__.popo'>, <class '__main__.pepe'>]
<class 'list'>
[<class '__main__.popo'>, <class '__main__.coco'>, <class '__main__.pepe'>, <class '__main__.papa'>]
使用 :
class klass():
pass
class popo(klass):
pass
class pepe(klass):
pass
print(klass.__subclasses__(),'\n')
class papa(klass):
pass
class coco(popo):
pass
print(klass.__subclasses__(),'\n')
我得到:
[<class '__main__.popo'>, <class '__main__.pepe'>]
[<class '__main__.popo'>, <class '__main__.pepe'>, <class '__main__.papa'>]
uj5u.com熱心網友回復:
...
class P:
A.__subclasses__()
>>> [<class '__main__.B'>, <class '__main__.C'>, <class '__main__.D'>]
subclasses - 回傳對直接繼承自該類的類的弱參考串列。 在此處輸入鏈接描述
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/407831.html
標籤:
