使用内部对象创建对象的最佳方法

时间:2016-04-07 20:38:38

标签: python

我需要创建一个对象系统,而系统又包含对象,例如:

class A(object):
    def __init__(self):
        self.A = 'Message from class A'

class B(object):
    def __init__(self):
        self.B = A()

或以这种方式做到

class B(object):

    def __init__(self):
        self.B = A()

    class A(object):
        def __init__(self):
            self.A = 'Message from class A'

所以我不能像

一样使用它
>>> C = B()
>>> print C.B.A
# Message from class A

这两者的最佳选择是什么,或者如果有其他的话,请欢迎!

编辑1 当前代码

class Foam(object):
    def __init__(self, rotor, path='OpenFoamCase'):
        self.dirs = {}
        self.path = path
        self.rotor = rotor
        self.rotorObj = Rotor(rotor)

        # OpenFoam case directories
        self.dirs['main'] = path if path.endswith('/') else path + '/'
        self.dirs['system'] = path + '/system/'
        self.dirs['constant'] = path + '/constant/'
        self.dirs['geometry'] = path + '/geometry/'
        self.dirs['polyMesh'] = path + '/constant/polyMesh/'
        self.dirs['triSurface'] = path + '/constant/triSurface/'

        self.__openFoamInit()
        self.mesh = OpenFoamBlockMesh(self)

class OpenFoamBlockMesh(object):
    def __init__(self, study):
       self.airfoil_offset = 0.5  
       self.rotor_disk_length = [20, 20]

        ...
    def box(self):
        ...

所以现在我用它作为:

study = Foam(rotor=rotor, path='OpenFoamCase_Tesis')
study.mesh.airfoil_offset = 0.02 
study.mesh.rotor_disk_length = [2, 2.5] 
study.mesh.box()

1 个答案:

答案 0 :(得分:1)

这实际上取决于你的目的。如果A类只是B的辅助类,并且是一个简单的小类,则可以使用第二种方法(内部类)。

如果类A可能用于其他类或是一个大类,建议使用第一种方法(简单组合)。

如果您提供更好的现实世界问题示例,我们可以为您提供更多帮助。