访问创建另一个 class 的 class
Accessing the class that created another class
我正在创建一个包含很多嵌套 classes 的包。想象一下 2 classes:房子和屋顶。 House 可以实例化一个 Roof,也可以存储它、更改它的属性并调用它的方法。但是反过来的问题呢? 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')
这只是对其工作原理的粗略猜测,但我正在测试以查看父 class 是否存在,然后想访问其属性。这可能吗?
我知道我可以将一个参数(房子的风格)传递给屋顶的 __init__
,但我要解决的真正问题涉及更多的属性,这是我想避免的。
我看到通过让屋顶 class 存储 属性 __house
来解决这个问题的软件包,我认为这是解决这个问题的方法。我假设 House 将 self
传递给 Roof 构造函数,但这似乎需要更多编码,我也想知道它是否复制了程序存储的对象。
谢谢!
生成的 class 可以通过一些技术上的 hacky 方法找出调用其构造函数的人,但这会非常混乱。
在您的 class 设计中,您可以使 Roof
在其构造函数
中传递对 House
的引用
class Roof:
def __init__(self, house):
self.house = house
但是,查看您的代码,我看到 "code smell"。当屋顶样式的设置方式取决于房屋的类型时,您将这两个 class 紧密地联系在一起。
"cleaner" 方法是允许使用屋顶创建者想要的任何样式创建屋顶:
class Roof:
def __init__(self, style):
self.style = style
然后在 House
内部,您可以选择哪种屋顶风格与哪种房屋风格相匹配。这样一来,屋顶就不需要引用回房子了。
我正在创建一个包含很多嵌套 classes 的包。想象一下 2 classes:房子和屋顶。 House 可以实例化一个 Roof,也可以存储它、更改它的属性并调用它的方法。但是反过来的问题呢? 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')
这只是对其工作原理的粗略猜测,但我正在测试以查看父 class 是否存在,然后想访问其属性。这可能吗?
我知道我可以将一个参数(房子的风格)传递给屋顶的 __init__
,但我要解决的真正问题涉及更多的属性,这是我想避免的。
我看到通过让屋顶 class 存储 属性 __house
来解决这个问题的软件包,我认为这是解决这个问题的方法。我假设 House 将 self
传递给 Roof 构造函数,但这似乎需要更多编码,我也想知道它是否复制了程序存储的对象。
谢谢!
生成的 class 可以通过一些技术上的 hacky 方法找出调用其构造函数的人,但这会非常混乱。
在您的 class 设计中,您可以使 Roof
在其构造函数
House
的引用
class Roof:
def __init__(self, house):
self.house = house
但是,查看您的代码,我看到 "code smell"。当屋顶样式的设置方式取决于房屋的类型时,您将这两个 class 紧密地联系在一起。
"cleaner" 方法是允许使用屋顶创建者想要的任何样式创建屋顶:
class Roof:
def __init__(self, style):
self.style = style
然后在 House
内部,您可以选择哪种屋顶风格与哪种房屋风格相匹配。这样一来,屋顶就不需要引用回房子了。