正在访问创建另一个类的类

问题描述 投票:1回答:1

我正在创建一个包含很多嵌套类的包。想象一下2类:房屋和屋顶。房屋可以实例化屋顶,并进行存储,更改其属性并调用其方法。但是相反的问题呢?屋顶对象能否找出它是否由房屋实例化并发现有关该父对象的任何信息?我的假定父House对象在此伪代码中为<parent>

class House(object):
    def __init__(self, style:str):
        self.style = style
        self.roof = Roof()

class Roof(object):
    def __init__(self):
        self.type = None
        if <parent>:
            if <parent>.style = 'Rambler':
                self.type = 'Open Gable'
            elif <parent>.style = 'Bungalow':
                self.type = 'Hip'

h = House('Bungalow')

这只是一个疯狂的猜测,它可能如何工作,但是我正在测试以查看是否存在父类,然后要访问其属性。这可能吗?

我知道我可以将一个参数(房屋的样式)传递给Roof的__init__,但是我要解决的真正问题是涉及更多的属性,这是我要避免的。

我已经看到通过让Roof类存储属性__house来解决此问题的程序包,我认为这是为了解决此问题。我假设House将self传递给Roof构造函数,但这似乎需要更多编码,而且我还想知道它是否复制了程序存储的对象。

谢谢!

python class object instantiation
1个回答
0
投票

[生成的类可以通过一些技术上的技巧来弄清楚谁调用了它的构造函数,但这很混乱。

在类设计中,可以使Roof传递其构造函数中对House的引用

class Roof:
    def __init__(self, house):
        self.house = house

但是,看着您的代码,我看到了“代码气味”。当屋顶样式的设置方式取决于房屋的类型时,您将两个类紧密地联系在一起。

“更清洁”的方式是允许以屋顶创建者期望的任何样式创建屋顶:

class Roof:
    def __init__(self, style):
        self.style = style

然后在House中,您选择哪种屋顶样式与哪种房屋样式相匹配。这样,无论如何屋顶也不需要参考房屋。

© www.soinside.com 2019 - 2024. All rights reserved.