设为首页 收藏本站
查看: 563|回复: 0

[经验分享] Python OOP Detail

[复制链接]

尚未签到

发表于 2017-4-26 09:27:05 | 显示全部楼层 |阅读模式
  data attribute
DSC0000.png
 

  方法
DSC0001.png
 
  调用超类构造函数
DSC0002.png
 

  重写方法
DSC0003.png
 
  interface

#Super 定义一个method函数以及在子类中期待一个动作的delegate
class Super:
def method(self):
print('in Super.method')    #Default behavior
def delegate(self):
self.action()               #Expected to be defined

#Inheritor 没有提供任何新的变量名,因此会获得Super中定义的一切内容
class Inheritor(Super):             #Inherit method verbatim
pass

#Replacer 用自己的版本覆盖Super的method
class Replacer(Super):              #Replace method completely
def method(self):
print('in Replacer.method')

#Extender 覆盖并返回默认method,从而定制Super的method
class Extender(Super):              #Extend method behavior
def method(self):
print('starting Extender.method')
Super.method(self)
print('ending Extender.method')

#Provider 实现Super的delegate方法预期的action方法
class Provider(Super):              #Fill in a required method
def action(self):
print('in Provider.action')

if __name__ == '__main__':
for instance in (Inheritor, Replacer, Extender):
print('\n' + instance.__name__ + '...')
instance().method()
print('\nProvider...')
x = Provider()
x.delegate()

  测试结果:
DSC0004.png
 

  抽象基类:assert、NotImplementedError
DSC0005.png
DSC0006.png
 

  @abstractmethod
DSC0007.png
 
  命名空间
DSC0008.png
 


Summary
  抽象类是会调用方法的类,但没有继承或定义该方法,而是期待该方法由子类填补。当行为无法预测,非得等到更为具体的子类编写时才知道,通常可用这种方式把类通用化。OOP软件框架也使用这种方式作为客户端定义、可定制的运算的实现方法。
  当简单赋值语句(x = y)出现在类语句的顶层时,就会把数据属性附加在这个类上(Class.x)。就像所有的类属性,这会由所有的实例共享。不过,数据属性并不是可调用的方法函数。
  如果类定义自身的__init__构造函数,但是也必须启动超类的构建其代码,就必须手动调用超类的__init__方法。超类的构造函数式通过类名称来调用,手动传入self实例:Superclass.__init__(self, ...)
  要增强继承的方法而不是完全替代,还得在子类中进行重新定义,但是要从子类的新版方法中,手动回调超类版本中的这个方法。也就是,把self实例手动传给超类版本的这个方法:Superclass.method(self,...)

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-369330-1-1.html 上篇帖子: Python The Basics 下篇帖子: Python读取XML
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表