基本继承

Python 中的继承基于其他面向对象语言(如 Java,C++等)中使用的类似思想。可以从现有类派生新类,如下所示。

class BaseClass(object):
    pass

class DerivedClass(BaseClass):
    pass

BaseClass 是已存在的( )类,DerivedClass 是从 BaseClass 继承(或子类 )属性的新( )类。注意 :从 Python 2.2 开始,所有类都隐式继承自 object ,这是所有内置类型的基类。 ** ****

我们在下面的例子中定义了一个父 Rectangle 类,它隐含地继承自 object

class Rectangle():
    def __init__(self, w, h):
        self.w = w
        self.h = h
    
    def area(self):
        return self.w * self.h
        
    def perimeter(self):
        return 2 * (self.w + self.h)

Rectangle 类可以用作定义 Square 类的基类,因为 square 是矩形的特例。

class Square(Rectangle):
    def __init__(self, s):
        # call parent constructor, w and h are both s
        super(Square, self).__init__(s, s)
        self.s = s

Square 类将自动继承 Rectangle 类的所有属性以及对象类。super() 用于调用 Rectangle 类的 __init__() 方法,实质上是调用基类的任何重写方法。注意 :在 Python 3 中,super() 不需要参数。

派生类对象可以访问和修改其基类的属性:

r.area()
# Output: 12
r.perimeter()  
# Output: 14

s.area()
# Output: 4
s.perimeter()
# Output: 8

内置函数与继承一起使用

issubclass(DerivedClass, BaseClass):如果 DerivedClassBaseClass 的子类,则返回 True

isinstance(s, Class):如果 s 是 Class 的实例或 Class 的任何派生类,则返回 True

# subclass check        
issubclass(Square, Rectangle)
# Output: True

# instantiate
r = Rectangle(3, 4)
s = Square(2)

isinstance(r, Rectangle)  
# Output: True
isinstance(r, Square)
# Output: False
# A rectangle is not a square

isinstance(s, Rectangle)
# Output: True
# A square is a rectangle
isinstance(s, Square)
# Output: True