基本繼承

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