Python基本继承

示例

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):
        returnself.w* self.h
        
    def perimeter(self):
        return 2 * (self.w + self.h)

的Rectangle类可被用作用于定义基类Square类,作为一个正方形是矩形的一种特殊情况。

class Square(Rectangle):
    def __init__(self, s):
        # 调用父构造函数,w和h均为s
        super(Square, self).__init__(s, s)
       self.s= s

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

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

r.area()
# 输出:12
r.perimeter()  
# 输出:14

s.area()
# 输出4
s.perimeter()
# 输出8

内置功能可继承

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

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

# 子类检查        
issubclass(Square, Rectangle)
# 输出:真

# 实例化
r = Rectangle(3, 4)
s = Square(2)

isinstance(r, Rectangle)  
# 输出:真
isinstance(r, Square)
# 输出:错误
# 矩形不是正方形

isinstance(s, Rectangle)
# 输出:真
# 正方形是矩形
isinstance(s, Square)
# 输出:真