Chris Headleand
Chris Headleand

Reputation: 6193

Creating an object with a reference to the object that created it

I have a program where an object creates another object. However, the second object that gets created needs to be able to access the first. Is this possible?

EG (pseudocode)

class parentObject():
    parentVar = 1
    # Create Child
    x = childObject()

class childObject():
    #Assign Var to the Var of the childs parent
    childVar = parent.parentVar    

>>> x.childVar = 1

is there a straitforward way to do this?

UPDATE:

I don't want to inheret the class, I need to be able to access the actual object that created it, as each object created from that class has different values.

Upvotes: 0

Views: 53

Answers (2)

Steinar Lima
Steinar Lima

Reputation: 7821

If you want a reference to the "parent" class, but inheritance is illogical, consider sending self in to the constructor:

class Room:
    def __init__(self, name):
        self.name = name
        self.furniture = []

    def add_chair(self):
        self.furniture.append(Chair(self))

    def __str__(self):
        return '{} with {}'.format(self.name, self.furniture)


class Chair:
    def __init__(self, room):
        self.room = room
    def __str__(self):
        return 'Chair in {}'.format(self.room.name)


r = Room('Kitchen')
r.add_chair()
r.add_chair()

print r
print r.furniture[0]

Output:

Kitchen with [<__main__.Chair instance at 0x01F45F58>, <__main__.Chair instance at 0x01F45F80>]
Chair in Kitchen

Upvotes: 1

sshashank124
sshashank124

Reputation: 32189

Why not inherit the class?

class parentObject():
    parentVar = 1

class childObject(parentObject):
    childVar = parentObject.parentVar

>>> x = childObject()
>>> print(x.childVar)
1

If you are going to have different instances of the class, you should do it as this instead:

class parentObject(object):
    def __init__(self):
        self.parentVar = 1

class childObject(parentObject):
    def __init__(self):
        super(childObject, self).__init__()
        self.childVar = self.parentVar

>>> x = childObject()
>>> print(x.childVar)
1

Upvotes: 4

Related Questions