I'm trying to learn more about classes and OOP.
How can I have my Person
class initialize with all the values of Entity
but also with a value that may not be contained in the Entity
class?
For example, both Person
and Spirit
inherit from Entity
. However, only a Person
would have a gender
. How can I have Person
initialize with gender
as well?
After that, would I still be able to create an instance of Person
and call describe()
in the same way I've done below?
class Entity(object):
def __init__(self, state, name, age):
self.state = state
self.name = name
self.age = age
class Person(Entity):
def describe(self):
print "Identification: %s, %s, %s." % (self.state, self.name, self.age)
class Spirit(Entity):
pass # for now
steve = Person("human", "Steve", "23" # can I then list gender here?)
steve.describe()
To create a class that inherits from another class, after the class name you'll put parentheses and then list any classes that your class inherits from. In a function definition, parentheses after the function name represent arguments that the function accepts.
The “__init__” is a reserved method in python classes. It is known as a constructor in Object-Oriented terminology. This method when called, allows the class to initialize the attributes of the class. Python super() The super() function allows us to avoid using the base class name explicitly.
No it isn't necessary.
Calling Parent class Method Well this can done using Python. You just have to create an object of the child class and call the function of the parent class using dot(.) operator.
Create a custom initializer on the sub-class and then call the parent class's initializer via super
:
class Person(Entity):
def __init__(self, state, name, age, gender):
self.gender = gender
super(Person, self).__init__(state, name, age)
Transitionally, it looks like versions of Py 3.x (not sure which ones) allow this terse version of super()
:
def __init__(self, state, name, age, gender):
self.gender = gender
# Prototype initialization 3.x:
super().__init__(state, name, age)
Been experimenting with SQLAlchemy models using dataclasses, so when I zipped on by looking at all things Python inheritance, I felt this might extend the answer:
from dataclasses import dataclass
@dataclass
class Entity():
state: str
name: str
age: int
@dataclass
class Person(Entity):
gender: str
def describe(self):
print("State: {state}, Name: {name}, Age: {age}, Gender: {gender}"
.format(state=self.state, name=self.name, age=self.age, gender=self.gender))
man = Person("human", "humanname", 21, "cisgendered")
man.describe()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With