也许你的分子属于一个系统并且不从它继承(你说的是一个错误的解决方案,但你没有根据类关系准确解释你的问题)。
如果是这种情况,您可以将系统添加为分子的属性。
class Molecule:
def __init__(self, system):
self.system = system
...
然后你写
sys1 = System()
mol1 = Molecule(sys1)
编辑:
您只需添加所需的参数。您还可以根据您的意图选择哪个类将保留对其他类的引用。您保留在班级内的列表可能会更好地保留在外面(或不保留),请参阅下面的代码。我有一个系统列表。每个系统都有一个分子列表。
分子不知道他们的系统(他们需要知道吗?他们的系统知道他们;我的第一个例子是相反的,分子知道他们的系统,这就是为什么你需要通过传递他们的系统引用来创建它们,连同你的参数)。在这种情况下,不需要。
class System:
def __init__(self, name,temp,N):
self.molecules = [] # list with the system molecules
self.name = name
self.temp=temp
self.N=N
def add_molecule(self, molecule):
self.molecules.append(molecule)
def add_molecules(self, molecule_list):
self.molecules.extend(molecule_list)
class Molecule:
def __init__(self, name, position, mass, radius):
self.name=name
self.position=position
self.mass=mass
self.radius=radius
self.epsilon=1
self.sigma=1
system_list = []
system1 = System("system1",100,10)
system2 = System("system2",120,10)
system_list.extend([system1, system2])
# example
for system in system_list:
print(system.name)
print()
# now some molecules for system1, you need to keep references to them,
# isolated or in list. Each system will know its molecules.
mol1 = Molecule('H2O', (0,0,0), 18, 200) # your values
mol2 = Molecule('CO2', (10,10,10), 44, 300)
mol3 = Molecule('O3', (10,10,10), 18*3, 600)
system1.add_molecule(mol1) # add molecules to a system
system2.add_molecules([mol2, mol3])
# example
for system in system_list:
print(system.name)
for molecule in system.molecules:
print(molecule.name)
print()
if mol1 in system1.molecules:
print('Found water here!')