0

a very dumb question, if we write __init__(self, ..) in our derived class then the derived class will no longer inherit the parent class's constructor because we overwrite it, if we want to keep using the constructor from the parent class we need to write parentClass.__init__(self, ..). However I noticed it is not true

class Item:
    def __init__(self,name= '',quantity = 0):
        self.name = name
        self.quantity = quantity

    def set_name(self, nm):
        self.name = nm

    def set_quantity(self, qnty):
        self.quantity = qnty

    def display(self):
        print(self.name, self.quantity)


class Produce(Item):  # Derived from Item
    def __init__(self,expiration = ''):
        self.expiration = expiration

    def set_expiration(self, expir):
        self.expiration = expir

    def get_expiration(self):
        return self.expiration

item2 = Produce()
item2.set_name('Apples')
item2.set_quantity(40)
item2.set_expiration('May 5, 2012')

print(item2.name,item2.quantity)

I can still access the parent class' attribute name and quantity without using Item.__init__(self) Could someone give me some hints why it works? Thanks in advance

1 Answer 1

2

The name and quantity are created in your set_...() methods.

In python, any method can create attributes on a class; it's usually considered bad style to do so, but there's no problem doing it - the only concern is that it can be confusing.

BTW, speaking of style - in python it's usually better style to omit setters and use item2.name = 'Apples' rather than item2.set_name('Apples'). If a setter is needed later, name can be turned into a property, overriding what happens on item2.name = 'Apples'

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.