类的抽象类接口类,多态封装
抽象类,接口类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | from abc import ABCMeta,abstractmethod class Payment(metaclass = ABCMeta): # 抽象类(接口类): @abstractmethod def pay( self ): pass # 制定了一个规范,子类中没有制定的这个方法就报错 class Alipay(Payment): def __init__( self ,money): self .money = money def pay( self ): print ( '使用支付宝支付了%s' % self .money) class Jdpay(Payment): def __init__( self , money): self .money = money def pay( self ): print ( '使用京东支付了%s' % self .money) class Wechatpay(Payment): def __init__( self ,money): self .money = money def pay( self ): print ( '使用微信支付了%s' % self .money) def pay(obj): obj.pay() w1 = Wechatpay( 200 ) a1 = Alipay( 200 ) j1 = Jdpay( 100 ) pay(a1) # 归一化设计 pay(j1) |
python 到处都是多态
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | python有鸭子类型. 鸭子类型 : 看着像鸭子,他就是鸭子. 这些类 都互称为鸭子.<br> #举例:字符串,列表,元组中都有index方法,这几个类就叫做鸭子类型.方法用一样的名字 class Str : def index( self ): pass class List : def index( self ): pass class Tuple : def index( self ): pass |
广义的封装: 实例化一个对象,给对象空间封装一些属性.
狭义的封装: 私有制.私有成员:私有静态属性,私有方法,私有动态属性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | <em id = "__mceDel" ><em id = "__mceDel" > class B: __money = 100000 class A(B): name = 'alex' __age = 1000 def func( self ): print ( self .__age) print (A.__age) # 对于私有静态属性,类的内部可以访问. print ( 'func....' ) def func1( self ): print ( self .__money) print (A.__money) a1 = A() print (a1.name) print (A.name) print (a1.__age) # 实例化对象不能访问私有静态属性 print (A.__age) # 类名不能访问私有静态属性 对于私有静态属性,类的外部不能访问. a1.func() 对于私有静态属性,类的内部可以访问. a1.func1() 对于私有静态属性来说,只能在本类中内部访问,类的外部,派生类均不可访问. 可以访问,但是工作中千万不要用. print (A._A__age) print (A.__dict__) 私有方法 class B: __money = 100000 def __f1( self ): print ( 'B' ) class A(B): name = 'alex' def __func( self ): print ( 'func....' ) def func1( self ): self .__func() # 类的内部可以访问 self .__f1() a1 = A() a1.__func() # 类外部不能访问 a1.func1() # 类的内部可以访问 # 面试题 class Parent: def __func( self ): print ( 'in Parent func' ) def __init__( self ): self .__func() class Son(Parent): def __func( self ): print ( 'in Son func' ) son1 = < / em> Son()<br> #实例化对象的时候先执行等号右边,然后自动执行类里面的__init__方法,<br>子类中没有去父类中找,<br>然后执行__func方法,<br>因为私有静态属性以及方法往下走时前面自动加上_类名,因为__init__方法在Parent类中,<br>所以等于执行_Parent__func方法,<br>打印in<em id="__mceDel"> Parent func</em></em> |
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步