本文作者:黎智煊,叩丁狼高级讲师。原创文章,转载请注明出处。
python-继承
-
在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类、父类或超类(Base class、Super class)。
比如,我们已经编写了一个名为Animal的class,有一个run()方法可以直接打印:
class Animal(object): def run(self): print('Animal is running...')
当我们需要编写Dog和Cat类时,就可以直接从Animal类继承:
class Dog(Animal):
pass
class Cat(Animal):
pass
对于Dog来说,Animal就是它的父类,对于Animal来说,Dog就是它的子类。Cat和Dog类似。
dog = Dog()
dog.run()
cat = Cat()
cat.run()
运行结果如下:
Animal is running... Animal is running...
当然,也可以对子类增加一些方法,比如Dog类:
class Dog(Animal):
def run(self):
print('Dog is running...')
def eat(self):
print('Eating meat...')
-
继承的第二个好处需要我们对代码做一点改进。你看到了,无论是Dog还是Cat,它们run()的时候,显示的都是Animal is running…,符合逻辑的做法是分别显示Dog is running…和Cat is running…,因此,对Dog和Cat类改进如下:
class Dog(Animal):
def run(self):
print('Dog is running...')
class Cat(Animal):
def run(self):
print('Cat is running...')
再次运行,结果如下:
Dog is running... Cat is running...
方法重写
- 如果你的父类方法的功能不能满足你的需求,你可以在子类重写你父类的方法:
实例:
class Parent: # 定义父类
def myMethod(self):
print '调用父类方法'
class Child(Parent): # 定义子类
def myMethod(self):
print '调用子类方法'
c = Child() # 子类实例
c.myMethod() # 子类调用重写方法
- 执行以上代码输出结果如下:
```
调用子类方法
# 基础重载方法
- ######下表列出了一些通用的功能,你可以在自己的类重写:
|序号 |方法, 描述 & 简单的调用|
|-------------|-----------------------------|
|1 | __init__ ( self [,args...] )构造函数 简单的调用方法: obj = className(args)|
|2 |__del__( self )析构方法, 删除一个对象简单的调用方法 : del obj
|3 |__repr__( self )转化为供解释器读取的形式简单的调用方法 : repr(obj)
|4 |__str__( self )用于将值转化为适于人阅读的形式简单的调用方法 : str(obj)
|5 |__cmp__ ( self, x )对象比较简单的调用方法 : cmp(obj, x)运算符重载
- ######Python同样支持运算符重载,实例如下:
实例
```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