所以我有 2 個列舉,問題是第一個列舉參考了第二個,第二個也參考了它。
from enum import Enum
class UniverseData:
def __init__(self, name, coordinate, civilisations)
self.civilisation_name = name
self.coordinate = coordinate
self.civilisation = civilisations
class CivilisationData:
def __init__(self, name, population_cap, universe)
self.name = name
self.population_cap = population_cap
self.universe = universe
class Universe(Enum):
Yievdal = UniverseData('Yievdal', 'X258RC', [Civilisation.HUMANITY, Civilisation.ERG, Civilisation.ELF])
Krastam = UniverseData('Krastam', 'X258BC', [Civilisation.MOJNA, Civilisation.CELES])
class Civilisation(Enum):
HUMANITY = CivilisationData('humanity', '11B', Universe.Yievdal)
ERG = CivilisationData('erg', '2B', Universe.Yievdal)
ELF = CivilisationData('elf', '2B', Universe.Yievdal)
MOJNA = CivilisationData('mojna', '50B', Universe.Krastam)
CELES = CivilisationData('celes', '110B', Universe.Krastam)
這里的問題是宇宙列舉不能使用文明列舉,因為它在下面宣告。
有沒有辦法解決這個問題?我希望能夠在宇宙列舉中擁有所有宇宙文明。
謝謝。
uj5u.com熱心網友回復:
您可以將civilisation屬性保留在定義中,并在Civilisation類也被定義后分配它,這樣可以防止回圈問題。我已經展示了一種可能的方法,但您可以撰寫一個函式來回圈遍歷Universe類的每個屬性并分配一個civilisation.
from enum import Enum
class UniverseData:
def __init__(self, name, coordinate, civilisations=None)
self.civilisation_name = name
self.coordinate = coordinate
self.civilisation = civilisations
class CivilisationData:
def __init__(self, name, population_cap, universe)
self.name = name
self.population_cap = population_cap
self.universe = universe
class Universe(Enum):
Yievdal = UniverseData('Yievdal', 'X258RC')
Krastam = UniverseData('Krastam', 'X258BC')
class Civilisation(Enum):
HUMANITY = CivilisationData('humanity', '11B', Universe.Yievdal)
ERG = CivilisationData('erg', '2B', Universe.Yievdal)
ELF = CivilisationData('elf', '2B', Universe.Yievdal)
MOJNA = CivilisationData('mojna', '50B', Universe.Krastam)
CELES = CivilisationData('celes', '110B', Universe.Krastam)
Universe.Yievdal.civilisation = [Civilisation.HUMANITY, Civilisation.ERG, Civilisation.ELF]
Universe.Krastam.civilisation = [Civilisation.MOJNA, Civilisation.CELES]
uj5u.com熱心網友回復:
在 python 中,你不能參考類的欄位,直到你宣告類。
所以,你需要class Civilisation像這樣在使用前定義。
from enum import Enum
class UniverseData:
def __init__(self, name, coordinate, civilisations):
self.civilisation_name = name
self.coordinate = coordinate
self.civilisation = civilisations
class CivilisationData:
def __init__(self, name, population_cap, universe):
self.name = name
self.population_cap = population_cap
self.universe = universe
class Universe(Enum):
Yievdal = UniverseData('Yievdal', 'X258RC', [])
Krastam = UniverseData('Krastam', 'X258BC', [])
class Civilisation(Enum):
HUMANITY = CivilisationData('humanity', '11B', Universe.Yievdal)
ERG = CivilisationData('erg', '2B', Universe.Yievdal)
ELF = CivilisationData('elf', '2B', Universe.Yievdal)
MOJNA = CivilisationData('mojna', '50B', Universe.Krastam)
CELES = CivilisationData('celes', '110B', Universe.Krastam)
Universe.Yievdal.civilisations = [Civilisation.HUMANITY, Civilisation.ERG, Civilisation.ELF]
Universe.Krastam.civilisations = [Civilisation.MOJNA, Civilisation.CELES]
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/395608.html
上一篇:多載成員運算子,?
下一篇:面向物件的設計來模擬通用設備
