Question

I'm writing a game in Python. The player character and enemy characters are instances of Person. Characters can have powers, of class Power. When a character uses a power in combat, the Power object needs to know who owns the power (in order to apply whatever effect the power has). How can I let the Power object know who its Person is?

One obvious solution is to include a creation argument storing a reference to the Person. However, this has several issues; one is that any methods of Power will likely then also need access to that variable, which gets awkward as I'm already passing around a bunch of arguments to every method.

I'd rather have a sort of 'clever' solution that allows an object to look 'up' to see where it is. Is there something like this?

Was it helpful?

Solution

It is not clear exactly how your objects interact, but here is a minimal example of one option:

def Power():

    def use(self, person):
        # do whatever


def Person():

    def __init__(self, power):
        self.power = power

    def use_power(self):
        self.power.use(self)

This provides an interface to the Power in Person, and passes the Person explicitly to the Power when it is used.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top