加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

史上最全Python面向对象编程

发布时间:2019-03-27 13:15:21 所属栏目:建站 来源:浪子燕青
导读:面向对象编程和函数式编程(面向过程编程)都是程序设计的方法,不过稍有区别。 面向过程编程: 1. 导入各种外部库 2. 设计各种全局变量 3. 写一个函数完成某个功能 4. 写一个函数完成某个功能 5. 写一个函数完成某个功能 6. 写一个函数完成某个功能 7. 写一

当我们传入Animal的实例时,run_twice()就打印出:

  1. run_twice(Animal()) 
  2. 运行结果: 
  3. Animal is running... 
  4. Animal is running... 

当我们传入Dog的实例时,run_twice()就打印出:

  1. run_twice(Dog()) 
  2. 运行结果: 
  3. Dog is running... 
  4. Dog is running... 

当我们传入Cat的实例时,run_twice()就打印出:

  1. run_twice(Cat()) 
  2. 运行结果: 
  3. Cat is running... 
  4. Cat is running... 

看上去没啥意思,但是仔细想想,现在,如果我们再定义一个Tortoise类型,也从Animal派生:

  1. class Tortoise(Animal): 
  2.     def run(self): 
  3.         print 'Tortoise is running slowly...' 

当我们调用run_twice()时,传入Tortoise的实例:

  1. run_twice(Tortoise()) 
  2. 运行结果: 
  3. Tortoise is running slowly... 
  4. Tortoise is running slowly... 

你会发现,新增一个Animal的子类,不必对run_twice()做任何修改,实际上,任何依赖Animal作为参数的函数或者方法都可以不加修改地正常运行,原因就在于多态。

多态的好处就是,当我们需要传入Dog、Cat、Tortoise……时,我们只需要接收Animal类型就可以了,因为Dog、Cat、Tortoise……都是Animal类型,然后,按照Animal类型进行操作即可。由于Animal类型有run()方法,因此,传入的任意类型,只要是Animal类或者子类,就会自动调用实际类型的run()方法,这就是多态的意思:

对于一个变量,我们只需要知道它是Animal类型,无需确切地知道它的子类型,就可以放心地调用run()方法,,而具体调用的run()方法是作用在Animal、Dog、Cat还是Tortoise对象上,由运行时该对象的确切类型决定,这就是多态真正的威力:调用方只管调用,不管细节,而当我们新增一种Animal的子类时,只要确保run()方法编写正确,不用管原来的代码是如何调用的。这就是著名的“开闭”原则:

对扩展开放:允许新增Animal子类;

对修改封闭:不需要修改依赖Animal类型的run_twice()等函数。

总结:继承可以把父类的所有功能都直接拿过来,这样就不必重零做起,子类只需要新增自己特有的方法,也可以把父类不适合的方法覆盖重写;

有了继承,才能有多态。在调用类实例方法的时候,尽量把变量视作父类类型,这样,所有子类类型都可以正常被接收;

旧的方式定义Python类允许不从object类继承,但这种编程方式已经严重不推荐使用。任何时候,如果没有合适的类可以继承,就继承自object类。

魔法方法

在上面有提到除了init之外还有iter,reverse的方法,这里就详细说下除了init初始化还有哪些别的方法。

  1. __init__ :      构造函数,在生成对象时调用 
  2. __del__ :       析构函数,释放对象时使用 
  3. __repr__ :      打印,转换 
  4. __setitem__ :   按照索引赋值 
  5. __getitem__:    按照索引获取值 
  6. __len__:        获得长度 
  7. __cmp__:        比较运算 
  8. __call__:       调用 
  9. __add__:        加运算 
  10. __sub__:        减运算 
  11. __mul__:        乘运算 
  12. __div__:        除运算 
  13. __mod__:        求余运算 
  14. __pow__:        幂 

具体使用

1. doc

说明性文档和信息。Python自建,无需自定义。

  1. class Foo: 
  2.     """ 描述类信息,可被自动收集 """ 
  3.     def func(self): 
  4.         pass 
  5. # 打印类的说明文档  
  6. print(Foo.__doc__) 

2. init()

实例化方法,通过类创建实例时,自动触发执行。

  1. class Foo: 
  2.     def __init__(self, name): 
  3.         self.name = name 
  4.         self.age = 18 
  5. obj = Foo(jack') # 自动执行类中的 __init__ 方法 

3. module__ 和 __class

module 表示当前操作的对象在属于哪个模块。

class 表示当前操作的对象属于哪个类。

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读