【发布时间】:2019-12-16 23:42:13
【问题描述】:
我正在创建一个包含很多嵌套类的包。想象一下 2 类:House 和 Roof。 House 可以实例化一个屋顶,也可以存储它,改变它的属性,调用它的方法。但是反过来的问题呢? Roof 对象能否确定它是否由 House 实例化并发现有关该父对象的任何信息?在这个伪代码中,我假设的父 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')
这只是对其工作原理的大胆猜测,但我正在测试是否存在父类,然后想要访问它的属性。这可能吗?
我知道我可以将一个参数(房子的风格)传递给屋顶的__init__,但我要解决的真正问题涉及更多的属性,这是我想要避免的。
我已经看到通过让 Roof 类存储属性 __house 来解决这个问题的包,我认为这是为了解决这个问题。我假设 House 将 self 传递给 Roof 构造函数,但这似乎需要更多编码,我也想知道它是否复制了程序存储的对象。
谢谢!
【问题讨论】:
-
“我假设 House 将 self 传递给 Roof 构造函数” - 仅当它被显式传递时。
Roof对象没有其他方法来获取对House对象的引用,除非明确给出该引用。 -
Python 具有很好的自省功能(您可以使用该语言来了解程序的当前状态和有关变量的元信息),这个答案应该可以满足您的需求 - 这可能会被关闭作为骗子:stackoverflow.com/questions/2611892/…
-
也许使用元类或其他东西,但没有明确传递
Roof,我认为你正在寻找错误的解决方案。 -
@mgrollins 这不是关于继承,这基本上是关于找出堆栈上一级发生的事情。基本上,函数的调用者是谁。
-
哦,对了。好吧,也许将
Roof和其他人设置为inner class 会建立在该反向链接中?
标签: python class object instantiation