zoukankan      html  css  js  c++  java
  • 接口类,抽象类,封装

    class Payment:  # 抽象类,或者接口类:制定一个规范.
        def pay(self):pass
    
    
    class QQ(Payment):
        def pay(self,money):
            print('您用qq支付了%s元' % money)
    
    
    class Ali(Payment):
        def pay(self,money):
            print('您用支付宝支付了%s元' % money)
    
    class Wechat(Payment):
        def pay(self,money):
            print('您用微信支付了%s元' % money)
    
    def pay(obj,money):
        obj.pay(money)  # a1.pay(200)
    
    # q1 = QQ()
    # a1 = Ali()
    # pay(q1,100)  # 统一化设计
    # pay(a1,200)
    # w1 = Wechat()
    # pay(w1,500)
    from abc import ABCMeta,abstractmethod
    
    class Payment(metaclass=ABCMeta):    # 抽象类 接口类  规范和约束  metaclass指定的是一个元类
        @abstractmethod
        def pay(self):pass  # 抽象方法
    
    class QQ(Payment):
        def pay(self,money):
            print('您用qq支付了%s元' % money)
        def ret(self):
            print('支付失败....')
    
    class Ali(Payment):
        def pay(self,money):
            print('您用支付宝支付了%s元' % money)
    
    class Wechat(Payment):
        def pay(self,money):
            print('您用微信支付了%s元' % money)
    
    def pay(obj,money):
        obj.pay(money)  # a1.pay(200)
    
    q1 = QQ()
    a1 = Ali()
    w1 = Wechat()
    # q1 = QQ()
    # a1 = Ali()
    # pay(q1,100)  # 统一化设计
    # pay(a1,200)
    # w1 = Wechat()
    # pay(w1,500)
    # 用处: 在工作中,如果你要是规定几个类必须有一样的方法,
    # 你要抽象类,制定一个规范,强制其有此方法.
    # python没有多态的概念,但是python崇尚鸭子类型.
    # 定义变量的方法:
    #1,java c# 需要定义 类型. int i= 3
    #2,java c# 没有多继承的概念.
    # i = 1
    # i = 'alex'
    # 鸭子类型: 它看着像鸭子,那么他就是鸭子.
    
    # str  list  tuple
    str.index()
    s1 = 'alex'
    class Str:
        def index(self):
            pass
    
    class List:
        def index(self):
            pass
    
    class Tuple:
        def index(self):
            pass
    #python中好多不同类但同名的方法不是强制规定,而是约定俗成,像上面这三种类,都同样据有index方法,而且功能相似,
    # 则 他们三个互称为鸭子.
    #封装就是将一些属性或者方法(有用的信息)放置在一个空间中.
    #1,封装    对象的封装.
    # class Person:
    #     def __init__(self,name,age):
    #         self.name = name
    #         self.age = age
    # p1 = Person('oldboy',1000)
    # p2 = Person('alex',10000)
    # print(p1.name)
    # print(p2.name)
    

    #
    2 封装 (私有成员.) #类的结构分析: # class Person: # mind = '有思想...' # 第一部分:所有的公有静态变量,公有静态字段 # __level = '高等动物' # 第一部分:私有静态变量,私有静态字段 # def __init__(self,name,age,sex): # 构造方法 # 第二部分 动态方法,方法(函数) # self.name = name # 公有对象属性 # self.age = age # self.__sex = sex # 私有对象属性 # def func(self): # 第二部分:普通方法 # print(666) # def __func1(self): # 第二部分:私有方法 # print(777) # # @staticmethod # 静态方法 # def f2():pass # # @classmethod # 类方法 # def f2(self): pass # # @property # 属性 # def hex(self):pass # # 类整体分类: #第一部分: 公有静态字段 mind = '有思想...' ,私有静态字段. __level = '高等动物' #第二部分: 特殊方法(__init__(公有属性,私有属性),__str__...) # 普通方法 def func(self) # 私有方法 def __func1(self): #类方法: # @classmethod # def f2(self): pass # 静态方法: # @staticmethod # 静态方法 # def f2():pass #属性: # @property # 属性 # def hex(self): pass # 私有成员: 私有静态字段,私有属性,私有方法 在变量前+ __双下划线.
    # 私有静态字段 # class Animal: # __cloth = '皮毛' # _Animal__cloth # # class Person(Animal): # mind = '有思想...' # 第一部分:所有的公有静态变量,公有静态字段 # __level = '高等动物' # 第一部分:私有静态变量,私有静态字段 # _Person__level # # def __init__(self,name,age): # 构造方法 # 第二部分 动态方法,方法(函数) # self.name = name # 公有对象属性 # self.age = age # def func(self): # print(self.__level) # print(self._Animal__cloth) # print(self.__cloth) # 在类的外面访问: 私有静态字段是访问不到的. # p1 = Person('alex',1000) # print(p1.mind) # print(p1.__level) # print(Person.__level) # print(Person.__dict__) # print(Person._Person__level) # 可以通过对象._类名__变量名 类名._类名__变量名 可以访问到,但是绝对不要这么访问. # 在类的内部: 私有静态字段是可以访问 # p1 = Person('alex',1000) # p1.func() # 父类的私有静态字段,派生类可否访问? 不可访问. # p1 = Person('alex',10) # print(p1.__cloth) # p1.func()
    # 静态字段,类的外部,派生类不能访问,只有内部可以访问
    # 私有方法 # class Animal: # def __f1(self):print(1111) # _Animal__f1 # # class Person(Animal): # mind = '有思想...' # 第一部分:所有的公有静态变量,公有静态字段 # def __init__(self,name,age): # 构造方法 # 第二部分 动态方法,方法(函数) # self.name = name # 公有对象属性 # self.age = age # self.__sex = sex # def __func(self): # _Person__func() # print(666) # def func1(self): # self.__func() # self._Person__func() # def func2(self): # self.__f1() # self._Person__f1() # 类外面访问不到. # p1 = Person('OLDBOY',1000) # p1.__func() # # 类内部可以方法. # p1 = Person('OLDBOY',1000) # p1.func1() # 派生类中也是不能访问的. # p1.func2() # 私有属性 也是类外部不能访问,派生类不能访问,只能在类内部访问. # class Animal: # def __f1(self):print(1111) # _Animal__f1 # # class Person(Animal): # mind = '有思想...' # 第一部分:所有的公有静态变量,公有静态字段 # def __init__(self,name,age,sex): # 构造方法 # 第二部分 动态方法,方法(函数) # self.name = name # 公有对象属性 # self.age = age # self.__sex = sex # def __func(self): # _Person__func() # print(666) # 总结: 对于私有成员来说,他加载到内存时,都会加上_类名__变量名,所以你在类的外部,或者派生类中都不可访问. #为什么设置私有成员? # 有些变量,方法,属性,只在类内部进行使用即可,不便于(不允许)类外部或者派生类去调用. # class Person: # def __init__(self,username,password): # 构造方法 # 第二部分 动态方法,方法(函数) # self.usn = username # 公有对象属性 # self.__pwd = self.__makepassword() # def __makepassword(self): # '''复杂的加密过程''' # new_pwd = self.__pwd + '666' # return new_pwd # p1 = Person('alex','123') # print(p1.__pwd) # class A: # def __init__(self): # self.__func() # def __func(self): # print('IN A') # class B(A): # def __func(self): # print('IN B') # b1 = B() class A: def __init__(self): self.func() def func(self): print('IN A') class B(A): def func(self): print('IN B') b1 = B() # b1.func()
  • 相关阅读:
    phoneGap
    backbonejs使用
    优化后的光标插件
    选择文本,范围
    js最佳继承范型
    深入理解事件捕获冒泡
    keyCode,charCode,which
    与IE奋战的血泪史
    【程序员的自我修养】如何使用IRC
    【程序员的自我修养】写给新手程序员的一封信
  • 原文地址:https://www.cnblogs.com/molieren/p/9255750.html
Copyright © 2011-2022 走看看