zoukankan      html  css  js  c++  java
  • day21 抽象类,接口类 多态(鸭子类型 封装) https://www.cnblogs.com/jin-xin/articles/9214247.html

      接口类,抽象类.
            只是你在工作中,书写的一种规范.


    # 用处: 在工作中,如果你要是规定几个类必须有一样的方法,
    # 你要抽象类,制定一个规范,强制其有此方法.
    # python没有多态的概念,但是python崇尚鸭子类型.
    # 定义变量的方法:
    #1,java c# 需要定义 类型. int i= 3
    #2,java c# 没有多继承的概念.
    # i = 1
    # i = 'alex'
    # 鸭子类型: 它看着像鸭子,那么他就是鸭子.
       python三大特性:
            python多态(鸭子类型).
            python封装.

    1封装就是将一些守护星或者方法(有用的信息)放置在一个空间中.

      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

       3类整体分类

          #第一部分:  公有静态字段 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()

    私有方法

    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 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()
    # print(b1.name)
    # print(b1.func)
    print(b1.func)
    print(b1.func())
    

      

  • 相关阅读:
    (四十九)android解决同一个界面上ScrollView和 ListView等可滚动控件滚动冲突问题
    (四十八)Android TextView中文字通过SpannableString来设置超链接、颜色、字体等属性
    (四十七)属性动画Demo
    (四十六)一个属性动画的经典例子(让TextView中的数值从某一个值变成0再变到另一个值)
    (四十五)百度地图在android中的应用
    iOS 检查更新
    iOS Apple Pay
    iOS 获取emoji表情和拦截emoji表情
    iOS拨打电话的三种方式
    Swift
  • 原文地址:https://www.cnblogs.com/daien522556/p/9272173.html
Copyright © 2011-2022 走看看