How to edit a instance variable?

Question:

I’m new to python and as I was doing an assignment for class, I got stuck using init method.

class Customer(object):
    def __init__(self, number, name):

        self.name = name
        self.number = number
        self.orders = []
        
        
    def addorder(self, order):
        self.orders.extend(order) 
        return self.orders

    def __str__(self):
        return str(self.orders)


Customer('308','John').addorder((1,2,3,4))

print(Customer('308','John'))

The output is an empty list [].

I want the output to be [1,2,3,4]

What am I doing wrong here?

Asked By: Sean Kim

||

Answers:

The issue is that you have two Customer objects. I.e. your print line:

print(Customer('308','John'))

Is creating a new Customer object with a number of '308' and a name of 'John'. It’s completely unrelated to the customer on the previous line.

To fix this, you should assign your first object to a variable (think of it like a handle, that lets you access the object), and then print that:

john = Customer('308','John')
john.addorder((1,2,3,4))
print(john)
Answered By: Alexander

You’re creating two instances of the class

class Customer(object):
    def __init__(self, number, name):

        self.name = name
        self.number = number
        self.orders = []
        
        
    def addorder(self, order):
        self.orders.extend(order) 
        return self.orders

    def __str__(self):
        return str(self.orders)


customer = Customer('308','John')
customer.addorder((1,2,3,4))

print(customer)

Answered By: John M.

Keep in mind that each time you "call" a class, you instantiate a new object (this is why in many languages other than Python, this actually requires the keyword new). So, in your example, you’re instantiating two different objects (that don’t share their properties). Instead, you should save them in a variable:

customer = Customer("308", "John")
customer.addorder((1, 2, 3, 4))
print(customer)
Answered By: BlackBeans
Categories: questions Tags:
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.