python====接口类 抽象类===19

python  中没有  接口这个概念 

接口类   抽象类  :  制定一个规范

  不能被实例化

  规范子类当中必须实现某个方法

  有原生的实现  抽象类的方法 ,但是  没有原生实现接口类的方法

接口类:  强制  定制  一个规范  ,凡是继承 我的类中的  

      必须都有  pay()方法  ,如果没有就会报错   

  e.g

  from  abc  import  ABCMeta  ,   abstractmethod

  class  Payment( metaclass=ABCMeta ) :  #  抽象类 (接口类)

    @abstractmethod

    def  pay( self ) : #制定一个规范    必须用pay方式来  写支付方法

      pass       

    @abstractmethod    # 制定一个  就添加一个   @  abstractmethod

    def  func( 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(Pay) :

    def  _ _init_ _ (self , money ) :

      self.money=money

    def  pay(self) :

      print("使用微信支付了 % s "  % self.money)

def  pay(  obj  ) :     #   在类的外边 写一个 方法  ,  传入的  参数  是  支付方式  

  obi.pay( )    #   在  支付方式   中  调用  pay() 方法

w1=Wechatpay( 200 )    #  实例化一个对象   自动执行  _ _init_ _

pay( w1 )   #归一化设计

     #   将实例化对象  传入  函数  pay  中     在  类中   的 Wecahtpay   中调用   自动执行  _ _init_ _ 执行pay  方法

封装:

  广义:  实力化一个对象  给对象空间 封装一些属性

  狭义:  私有制

  

  私有成员:  私有静态字段   私有动态方法   私有对象属性   

  私有成员  是在正常成员前边加     '   _ _    ' 

私有静态字段:    类的外部  都不能访问  

    在  本类  中可以  访问  ,   在本类方法中   ,  创建一个调用的方法

在外部可以调用   千万不能用   

直接  打印  print(  类名  _ 类名 _ _属性   )    #  因为函数一运行识别到有私有成员时   就直接  变为  _类名_ _属性 了  ,这样别的就调用不到了

 e.g

  class  A:

    name = ' alex ' 

    _ _age= 1000

    def  func( self )  :

      print( self . _ _ age )

      print( A. _ _age )

      print(    '   func... '    )

a1= A( )

print( a1.name )   ====   alex 

print (A. name)   ====  alex  

print(  a1. _ _age  )  === 报错      实例化对象不能调用静态字段    在类外边 

print (A. _ _age )    ===   报错    类名也不能调用    在类 外边 

a1. func()=====   1000   1000    func...

私有方法:   类的外部  不能访问

     内部可以

     派生类也不可以

e.g

  

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 = Son() # ===>in  Parent func     函数中有私有方法  ,  方法名 自动变成了  _ Parent_ _func      _Son _ _func

                  但是  Son()自动执行的是 _ _init_ _, 但是_ _init__所在的类是  Parent  

                  因此  ,会执行  Parent 类中的  _ _func方法  ====>   in Parent  func

    

原文地址:https://www.cnblogs.com/lynysy/p/9373526.html