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

时间:2017-10-20 21:41:14

标签: python python-2.7 class oop inheritance

我希望创建一个带有参数的类System:sysnametempN

并创建一个子类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)

我可以将System的实例设为

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

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

另外,请告诉我的班级定义是否还有其他问题

2 个答案:

答案 0 :(得分:5)

也许你的分子属于一个系统并且不从它继承(你说的是一个错误的解决方案,但你没有在类关系方面准确解释你的问题)。

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

class Molecule:
    def __init__(self, system):
        self.system = system
        ...

然后你写

sys1 = System()
mol1 = Molecule(sys1)

编辑:

您只需添加所需的参数即可。您还可以根据自己的意图选择哪个班级继续引用另一个班级。您保留在课堂内的列表可能更好地保持在外(或不),请参阅下面的代码。我有一个系统列表。每个系统都有一个分子列表。 分子不知道他们的系统(他们需要知道吗?他们的系统知道他们;我的第一个例子被颠倒了,Molecules知道他们的系统,这就是为什么你需要通过传递他们的系统参考来创建它们,以及你的参数)。在这种情况下,这是不需要的。

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

答案 1 :(得分:0)

每个分子实例都具有System的所有属性,与其他System实例无关。你混淆了对象的实例和定义。