我想知道是否有办法访问实例化对象的类(或其字段)。假设我有:
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
中声明的Class1
实例访问Class1实例(意思是,访问Class1
的字段self.class2Field
实例中的变量Class1
我知道我总是可以更改Class2中的__init__
以接受Class1
参数,但我想知道是否有另一种方法可以“爬”通过类层次结构。
非常感谢!
答案 0 :(得分:4)
是的,但不要这样做。明确传递对象。
答案 1 :(得分:1)
这里没有“阶级等级”可言。您的Class1
个对象包含Class2
个对象,但您的Class2
个对象不知道该对象。
您可以将self.parent
中的Class2
定义为Class1
的实例,引用self.class2Field
中的对象,并传递您的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
总是被包含(至少我上面写的方式),但它可能会做你想要的。
答案 2 :(得分:0)
您不必弄乱子类(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