kdkmoment kdkmoment - 2 months ago 8
Python Question

Classes, Objects, Inheritance?

I'm supposed to create three classes, a parent, and child 1 and child 2. Child 1 and 2 are supposed to inherit from the Parent class. So I believe I've done that.

class Parent:
"""Parent Object"""

def __init__(self):
self.greeting = "Hi I'm a Parent Object!"


class ChildA(Parent):

def __init__(self):
childclass.__init__(self)
self.childgreeting = "Hi I'm a Child Object!"


class ChildB(Parent):
pass


Now I have to write a parent object and child 1 and 2 objects that will print out their respective strings. Thats where I'm getting confused. I already put in the strings that they are a child or parent object within their classes. But how do I get them to print as an object? I've started out my code like this.

class Parent(object):

class ChildA(object):

class ChildB(object):


But how to get those strings to print is bugging me. And I have a feeling my ChildA code for the class is not correct either. Can anyone help me?

Thank you!

Answer

Child 1 and 2 are supposed to inherit from the Parent class. So I believe I've done that

Yes, in the first code, you have, but not in the second code.

I have to write a parent object and child 1 and 2 objects that will print out their respective strings

Okay...

p = Parent()
child_a = ChildA()

print(p.greeting) 
print(child_a.childgreeting)

However - ChildA() won't work because __init__ should look like this

class ChildA(Parent):

    def __init__(self):
        super().__init__() # This calls the Parent __init__
        self.childgreeting = "Hi I'm a Child Object!"

Now, the above code will work.

But, I assume you want the greeting attribute to be overwritten? Otherwise you get this

print(child_a.greeting) # Hi I'm a Parent Object!
print(child_a.childgreeting) # Hi I'm a Child Object!

If that is the case, you simply change childgreeting to greeting. Then, from the first example

print(p.greeting) # Hi I'm a Parent Object!
print(child_a.greeting)  # Hi I'm a Child Object!

how do I get them to print as an object?

Not entirely sure what you mean by that, but if you define __str__ to return greeting

class Parent:
    """Parent Object"""

    def __init__(self):
        self.greeting = "Hi I'm a Parent Object!"

    def __str__(self):
        return self.greeting

The example now becomes

print(p) # Hi I'm a Parent Object!
print(child_a)  # Hi I'm a Child Object!