G. Andrews
G. Andrews

Reputation: 41

Altering attributes in another class in Python

I have been trying to alter a list in class Inventory from class Pod, but I get an error that I am popping from an empty set. Is there anyway that I can pop from a list from an Inventory instance that I know is populated? Essentially, I am trying to transfer widgets from Inventory to Pod.

class Widget():

    def __init__(self):
        self.cost = 6
        self.value = 9


class Inventory():

    def __init__(self):
        self.widgets_inv = []
        self.cost_inv = 0
        self.value_inv = 0

    def buy_inv(self):
        x = int(input("How many widgets to you want to add to inventory? "))
        for i in range(0, x):
            self.widgets_inv.append(Widget())

    def get_inv(self):
        print("You have " + str(len(self.widgets_inv)) + " widgets in inventory.")

    def cost_of_inv(self):
        cost_inv = len(self.widgets_inv) * Widget().cost
        print("The current cost of your inventory is: " + cost_inv + " USD.")

    def value_of_inv(self):
        val_inv = len(self.widgets_inv) * Widget().value
        print("The current value of your inventory is: " + val_inv + " USD.")

class Pod():
    """A pod is a grouping of several widgets.  Widgets are sold in pods"""

    def __init__(self):
        self.pod = []

    def creat_pod(self):
        x = int(input("How many widgets would you like to place in this pod? "))
        for i in range(0, x):
            self.pod.append(Widget())
            Inventory().widgets_inv.pop()

Upvotes: 4

Views: 1324

Answers (1)

Aedvald Tseh
Aedvald Tseh

Reputation: 1917

You should modify the creat_pod-method, so that you can handover the Inventory-object. This allows you to add widgets to the inventory-object before calling creat_pod-method:

def creat_pod(self, inventory):
        x = int(input("How many widgets would you like to place in this pod? "))
        for i in range(0, x):
            self.pod.append(Widget())
            inventory.widgets_inv.pop()

In your original code you create always a new Inventory-object, which has therefore and empty widget-list:

Inventory().widgets_inv.pop()

Upvotes: 6

Related Questions