基本繼承
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)
:如果 DerivedClass
是 BaseClass
的子類,則返回 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