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

2024-09-29 01:33:18 发布

您现在位置: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()

Tags: path对象fromselfmessageobjectinitdef
1条回答
网友
1楼 · 发布于 2024-09-29 01:33:18

这取决于你的目的。如果A类只是B的助手类,并且是一个简单的小类,那么可以使用第二个方法(内部类)。你知道吗

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

如果你能提供一个更好的例子来说明你在现实世界中遇到的问题,我们也许能为你提供更多帮助。你知道吗

相关问题 更多 >