我創建了類檔案:
@dataclass
class Match:
length: int
pos_A: int
pos_B: int
f_index: int
class File:
__name = ""
__pos_in_list = 0
__statements = []
__matches = []
def __init__(self, name: str, pos: int, statements: [Statement]):
self.__name = name
self.__pos_in_list = pos
self.__statements = statements
def set_matches(self, matches: [Match]):
self.__matches.append(matches)
在放置 3 個 File 類物件后,我有一個串列 A = [File, File, File] 并呼叫:
A[0].set_matches[Match(1,2,3,4)]
串列 A 中的所有檔案都已更新,因此如下所示:
pos_in_list: 0 matches: [[Match(length=1, pos_A=2, pos_B=3, f_index=4)]]
pos_in_list: 1 matches: [[Match(length=1, pos_A=2, pos_B=3, f_index=4)]]
pos_in_list: 2 matches: [[Match(length=1, pos_A=2, pos_B=3, f_index=4)]]
,但我希望它像:
pos_in_list: 0 matches: [[Match(length=1, pos_A=2, pos_B=3, f_index=4)]]
pos_in_list: 1 matches: []
pos_in_list: 2 matches: []
串列填寫如下:
files = []
for i in range(len(parsed_text)):
statements = []
for func in parsed_text[i]:
statements.extend(parse_text_into_tokens(func ";"))
f = File(filenames[i], i, statements)
files.append(f)
問題出在哪里?
uj5u.com熱心網友回復:
您需要在 init 方法中移動變數定義。在 init 之外定義變數意味著這些變數將在所有物件之間共享。也一樣__name,變數也__pos_in_list一樣__statements
@dataclass
class Match:
length: int
pos_A: int
pos_B: int
f_index: int
class File:
__name = ""
__pos_in_list = 0
__statements = []
def __init__(self, name: str, pos: int, statements: [Statement]):
self.__matches = []
self.__name = name
self.__pos_in_list = pos
self.__statements = statements
def set_matches(self, matches: [Match]):
self.__matches.append(matches)
uj5u.com熱心網友回復:
您需要在 set_matches() 方法中添加額外的檢查。在這里,您需要驗證您添加到串列中的物件是否已經存在于串列中。
您也可以使用 set 而不是 list 進行 __matches,但您需要確定如何比較兩個資料類物件
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/526691.html
上一篇:限制和偏移MYSQL的排序問題
