从另一个类的另一个实例访问类的“上”实例
我想知道是否有办法访问实例化对象的类(或其字段)。比方说,我有:从另一个类的另一个实例访问类的“上”实例
def Class1:
def __init__(self):
self.title = "randomTitle"
self.anotherField = float()
self.class2Field = Class2()
,其类型的类将是class2Field
:
def Class2:
def __init__(self):
self.field1 = ""
self.field2 = ""
# . . . #
我想知道是否有从的Class2
实例访问Class 1的实例的方式即在Class1
声明(意思是,从变量self.class2Field
访问的Class1
领域在Class1
实例)
我知道我可以随时更改__init__
在Class2中接受Class1
参数,但我想知道是否有另一种“攀爬”类层次结构的方式。
非常感谢!
是的,但不要这样做。明确传递对象。
在这里没有“类层次”可以说。您的Class1
对象包含Class2
对象,但您的Class2
对象不知道。
你可以在Class2
定义self.parent
到是指物体在self.class2Field
的Class1
实例,并让您Class1
例如,通过__init__
传递:
def Class1:
def __init__(self):
self.title = "randomTitle"
self.anotherField = float()
self.class2Field = Class2(self)
# . . . #
def Class2:
def __init__(self, parent):
self.parent = parent
self.field1 = ""
self.field2 = ""
# . . . #
这是丑陋的,它更多的开销,而且要求总是包含Class2
(至少是我上面写的方式),但它可能会做你想要的。
是啊...我想我可能不得不把它包裹...但它是一个可惜:( 它使事情的方式比我预期的更复杂... – BorrajaX 2010-06-16 22:32:14
你不必乱搞子类(Class2)的定义。创建实例后,只需将其他属性附加到其实例即可。
def Class1:
def __init__(self):
self.title = "randomTitle"
self.anotherField = float()
self.class2Field = Class2()
self.class2Field.parent = self # <- This is where you attach the pointer to parent.
# . . . #
def Class2:
def __init__(self):
self.field1 = ""
self.field2 = ""
def mess_with_parent(self):
'''Example of access to instance-level property "parent"'''
if hasattr(self, 'parent') and self.parent != None:
# instead of "!= None" insert your way of checking that .parent is right type
self.parent.anotherField = 5.0
# . . . #
a = Class1()
<instance of class1> = a.class2Field.parent
b = a.class2Field
<instance of class1> = b.parent
:D来吧ooooon:DI只需要访问中的一个字段,以显示正确的调试信息......是不是要去伤害任何人...:d:d THX的快速回复,但。 .. – BorrajaX 2010-06-16 16:26:48