(接DAY44)

十、类

类的继承

如果一种语言不支持继承,类就没有什么意义。

继承是面向对象的主要特征之一,通过继承可以实现代码的复用。子类(派生类 DerivedClassName)会继承父类(基类 BaseClassName)的属性和方法(变量和函数)。所有的类都有一个父类object
格式:

class DerivedClassName(BaseClassName):
    <statement-1>
    .
    .
    .
    <statement-N>

BaseClassName(实例中的基类名)必须与派生类定义在一个作用域内。除了类,还可以用表达式,基类定义在另一个模块中时这一点非常有用:

class DerivedClassName(modname.BaseClassName):

Python同样有限的支持多继承形式。多继承的类定义形如下例:

class DerivedClassName(Base1, Base2, Base3):
    <statement-1>
    .
    .
    .
    <statement-N>

需要注意圆括号中父类的顺序,若是父类中有相同的方法名,而在子类使用时未指定,python从左至右搜索(即方法在子类中未找到时,从左到右查找父类中是否包含方法。)

方法重写

如果父类方法的功能不能满足需求,可以在子类重写父类的方法,示例如下:

class Parent:        # 定义父类
   def myMethod(self):
      print ('调用父类方法')
 
class Child(Parent): # 定义子类
   def myMethod(self):
      print ('调用子类方法')
 
c = Child()          # 子类实例
c.myMethod()         # 子类调用重写方法
super(Child,c).myMethod() #用子类对象调用父类已被覆盖的方法

super()函数是用于调用父类(超类)的一个方法。

执行以上程序输出结果为:

调用子类方法
调用父类方法

运算符重载

Python支持运算符重载,可以对类的专有方法进行重载,实录如下:

class Vector:
   def __init__(self, a, b):
      self.a = a
      self.b = b
 
   def __str__(self):
      return 'Vector (%d, %d)' % (self.a, self.b)
   
   def __add__(self,other):
      return Vector(self.a + other.a, self.b + other.b)
 
v1 = Vector(2,10)
v2 = Vector(5,-2)
print (v1 + v2)

以上代码执行结果如下所示:

Vector(7,8)

标签: 达内, 软件测试, Python

分类: 个人日志, 软件测试学习, Python, 学点技术

添加新评论