Skip to main content
 首页 » 编程设计

python之如何使用继承在python中定义父对象

2025年05月04日22cmt

我想创建一个带参数的类系统:sysname,temp,N

并创建一个子类 Molecule,它使用继承从 System.

class System() : 
    def __init__(self,sysname,temp,N): 
        self.sysname=sysname 
        self.temp=temp 
        self.syslist=[] 
        self.N=N 
 
 
class Molecule(System) : 
    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 
        self.syslist.append(self) 

我可以创建一个系统实例

System1=System("system1",100,10) 
System2=System("system2",120,10) 

现在在定义分子时,如何定义它属于哪个系统?

此外,请告诉我的类定义是否还有其他问题

请您参考如下方法:

也许你的分子属于一个系统而不是从它继承(你陈述了一个错误的解决方案,但你没有根据类关系准确地解释你的问题)。

如果是这种情况,您可以将系统添加为分子的属性。

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!')