基本继承
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