Python面向对象(五)

本文作者:黎智煊,叩丁狼高级讲师。原创文章,转载请注明出处。

python-继承

  1. 在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类似。

  1. 继承有什么好处?最大的好处是子类获得了父类的全部功能。由于Animial实现了run()方法,因此,Dog和Cat作为它的子类,什么事也没干,就自动拥有了run()方法:

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...')
  1. 继承的第二个好处需要我们对代码做一点改进。你看到了,无论是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

 

猜你喜欢

转载自blog.csdn.net/wolfcode_cn/article/details/82798469