Home  >  Article  >  Backend Development  >  Detailed explanation explains the inheritance of Python classes in detail

Detailed explanation explains the inheritance of Python classes in detail

迷茫
迷茫Original
2017-03-25 17:50:181583browse

Inheritance of Python classes (Advanced 5)

1. What is inheritance in python

What is inheritance in python:

  • New Classes do not have to be written from scratch

  • The new class inherits from the existing class and automatically has all the functions of the existing class

  • The new class only Need to write new features that are missing from existing classes

Benefits of inheritance:

  • Reuse existing code

  • Automatically possess all the functions of existing classes

  • Only need to write the missing new functions

Inherited features:

  • The subclass and the parent class are in an is relationship

Characteristics of python inheritance:

  • Always start from A class inherits

  • Don’t forget to call super().init

2. Inheriting a class in python

class Person(object):
    def init(self, name, gender):
        self.name = name
        self.gender = gender
class Teacher(Person):
    def init(self, name, gender, course):
        super(Teacher, self).init(name, gender)
        self.course = course

t = Teacher('Alice', 'Female', 'English')
print t.name
print t.course

3. Determining the type in python

The function isinstance() can determine the type of a variable. It can be used in Python’s built-in data types such as str, list, and dict, and can also be used in our Custom classes, they are essentially data types.

class Person(object):
    def init(self, name, gender):
        self.name = name
        self.gender = gender

class Student(Person):
    def init(self, name, gender, score):
        super(Student, self).init(name, gender)
        self.score = score

class Teacher(Person):
    def init(self, name, gender, course):
        super(Teacher, self).init(name, gender)
        self.course = course

t = Teacher('Alice', 'Female', 'English')

print isinstance(t, Person)
print isinstance(t, Student)
print isinstance(t, Teacher)
print isinstance(t, object)

4. Polymorphism in python

class Person(object):
    def init(self, name, gender):
        self.name = name
        self.gender = gender
    def whoAmI(self):
        return 'I am a Person, my name is %s' % self.name

class Student(Person):
    def init(self, name, gender, score):
        super(Student, self).init(name, gender)
        self.score = score
    def whoAmI(self):
        return 'I am a Student, my name is %s' % self.name

class Teacher(Person):
    def init(self, name, gender, course):
        super(Teacher, self).init(name, gender)
        self.course = course
    def whoAmI(self):
        return 'I am a Teacher, my name is %s' % self.name
        
        
import json

class Students(object):
    def read(self):
        return r'["Tim", "Bob", "Alice"]'

s = Students()

print json.load(s)

5. Multiple inheritance in python

In addition to inheriting from one parent class, Python allows inheritance from multiple parent classes, called for multiple inheritance. Java cannot have multiple inheritance

class A(object):
    def init(self, a):
        print 'init A...'
        self.a = a

class B(A):
    def init(self, a):
        super(B, self).init(a)
        print 'init B...'

class C(A):
    def init(self, a):
        super(C, self).init(a)
        print 'init C...'

class D(B, C):
    def init(self, a):
        super(D, self).init(a)
        print 'init D...'
        
        
class Person(object):
    pass

class Student(Person):
    pass

class Teacher(Person):
    pass

class SkillMixin(object):
    pass

class BasketballMixin(SkillMixin):
    def skill(self):
        return 'basketball'

class FootballMixin(SkillMixin):
    def skill(self):
        return 'football'

class BStudent(BasketballMixin):
    pass

class FTeacher(FootballMixin):
    pass

s = BStudent()
print s.skill()

t = FTeacher()
print t.skill()

6. Obtaining object information in python

In addition to using isinstance() to determine whether it is an instance of a certain type, is there any other way to obtain more What about the information?

First, you can use the type() function to get the type of the variable, which returns a Type object.

dir() function gets all the attributes of the variable.

The attributes returned by dir() It is a list of strings. If an attribute name is known, to get or set the attributes of the object, you need to use the getattr() and setattr() functions

class Person(object):
    def init(self, name, gender):
        self.name = name
        self.gender = gender

class Student(Person):
    def init(self, name, gender, score):
        super(Student, self).init(name, gender)
        self.score = score
    def whoAmI(self):
        return 'I am a Student, my name is %s' % self.name

print type(123) # <type &#39;int&#39;>

s = Student(&#39;Bob&#39;, &#39;Male&#39;, 88)
print s  # <class &#39;main.Student&#39;>

print dir(123) # [&#39;abs&#39;, &#39;add&#39;, &#39;and&#39;, &#39;class&#39;, &#39;cmp&#39;, &#39;coerce&#39;, &#39;delattr&#39;, &#39;p&#39;, &#39;pmod&#39;, &#39;doc&#39;, &#39;float&#39;, &#39;floorp&#39;, &#39;format&#39;, &#39;getattribute&#39;, &#39;getnewargs&#39;, &#39;hash&#39;, &#39;hex&#39;, &#39;index&#39;, &#39;init&#39;, &#39;int&#39;, &#39;invert&#39;, &#39;long&#39;, &#39;lshift&#39;, &#39;mod&#39;, &#39;mul&#39;, &#39;neg&#39;, &#39;new&#39;, &#39;nonzero&#39;, &#39;oct&#39;, &#39;or&#39;, &#39;pos&#39;, &#39;pow&#39;, &#39;radd&#39;, &#39;rand&#39;, &#39;rp&#39;, &#39;rpmod&#39;, &#39;reduce&#39;, &#39;reduce_ex&#39;, &#39;repr&#39;, &#39;rfloorp&#39;, &#39;rlshift&#39;, &#39;rmod&#39;, &#39;rmul&#39;, &#39;ror&#39;, &#39;rpow&#39;, &#39;rrshift&#39;, &#39;rshift&#39;, &#39;rsub&#39;, &#39;rtruep&#39;, &#39;rxor&#39;, &#39;setattr&#39;, &#39;sizeof&#39;, &#39;str&#39;, &#39;sub&#39;, &#39;subclasshook&#39;, &#39;truep&#39;, &#39;trunc&#39;, &#39;xor&#39;, &#39;bit_length&#39;, &#39;conjugate&#39;, &#39;denominator&#39;, &#39;imag&#39;, &#39;numerator&#39;, &#39;real&#39;]

print dir(s) # [&#39;class&#39;, &#39;delattr&#39;, &#39;dict&#39;, &#39;doc&#39;, &#39;format&#39;, &#39;getattribute&#39;, &#39;hash&#39;, &#39;init&#39;, &#39;module&#39;, &#39;new&#39;, &#39;reduce&#39;, &#39;reduce_ex&#39;, &#39;repr&#39;, &#39;setattr&#39;, &#39;sizeof&#39;, &#39;str&#39;, &#39;subclasshook&#39;, &#39;weakref&#39;, &#39;gender&#39;, &#39;name&#39;, &#39;score&#39;, &#39;whoAmI&#39;]

print getattr(s, &#39;name&#39;) # Bob
setattr(s, &#39;name&#39;, &#39;Adam&#39;) 
print s.name # Adam

class Person(object):

    def init(self, name, gender, **kw):
        self.name = name
        self.gender = gender
        for k, v in kw.iteritems():
            setattr(self, k, v)


p = Person(&#39;Bob&#39;, &#39;Male&#39;, age=18, course=&#39;Python&#39;)
print p.age # 18
print p.course #Python

The above is the detailed content of Detailed explanation explains the inheritance of Python classes in detail. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn