zoukankan      html  css  js  c++  java
  • python-35-多态与初识封装

    前言

    多态:指的是一类事物有多种形态,也就是一个对象的类型,动物有多种形态:人,狗,猪。

    多态性:是指在不考虑实例类型的情况下都可以使用实例。

    封装:面向对象的思想本身就是一种封装,让特有对象能够调用类中的方法,面向对象三大特性之一;

    一、多态

    Python天生自带多态,有没有发现传什么类型的参数都可以?除非是本身不支持的,如迭代器,不可迭代的数据。有着强类型如“str+int”会给你报错,也有弱类型就比如多态,所以Python是一门动态类型语言,

    1、证明Python天生是多态:

    • 不管在传参的时候什么类型都可以什么对象ojbect、int/str/dict等等,对类型不敏感。
    • 不像其它语言,接收参数要定义它的数据类型,入参类型不一致就会报错。
    # 1、证明Python天生是多态:
    # 不管在传参的时候什么类型都可以什么对象ojbect、int/str/dict等等,对类型不敏感。
    # 不像其它语言,接收参数要定义它的数据类型,入参类型不一致就会报错。
    def func(a):
        return a
    print(func('asdasdasdasd'))
    print(func(123))

     2、鸭子类型

    Python中list 与 tuple 都有着相似的方法,并没有继承产生父类子类关系,称为:鸭子类型

    # 2、鸭子类型
    # list 与 tuple 都有着相似的方法,并没有产生父类子类关系,称为:鸭子类型
    l = list
    l.index()
    l.count()
    
    t = tuple
    t.index()
    t.count()
    • 有着相似的方法,但它不崇尚根据继承所得来的相似;
    • 强类型语言,只能用多态定义一个类型;
    • 鸭子类型优点 : 松耦合 每个相似的类之间都没有影响;
    • 鸭子类型缺点 : 太随意,没有硬性约束只能看自己了;

    多态中得到的总结:

    1. 接口类和抽象类 在python当中的应用点并不是非常必要;
    2. Python中不崇尚像其它语言那样去继承做规范,就比如list与tuple都有着相似的方法都没有用继承;
    3. 所以Python是崇尚鸭子类型,所以不崇尚继承做规范;

     二、封装

    封装:面向对象的思想本身就是一种封装,让特有对象能够调用类中的方法;

    也就是面向对象的三大特性之一,属性与方法都看不到实际的对象数据。

    1、登录账号例子:

    并不知道实际的登录的是哪个账号密码是什么,所以我们面向对象封装了一个登录的类

    # 1、登录账号例子:
    # 并不知道实际的登录的是哪个账号,所以我们面向对象封装了一个登录的类
    class Login:
        def __init__(self, name, pwd):
            self.name = name
            self.pwd = pwd
        def login(self):
            return self.name+' 登录成功!'
    
    res_name = input('请输入您的账号')
    res_pwd = input('请输入您的密码')
    res_lg = Login(res_name, res_pwd)
    login = res_lg.login()
    print(login)

     2、私有动态属性、私有方法、私有静态属性:

    # 2、私有动态属性、私有方法、私有静态属性
    class Login:
        __key = '666'                       # 私有静态属性
        def __init__(self, name, pwd):
            self.name = name
            self.__pwd = pwd                 # 私有动态属性
    
        def name(self):
            return self.name
    
        # 静态发方法:__get_pwd
        def __get_pwd(self):return self.__key+self.__pwd
    
        def login(self):                  # 类内部调用:self.__get_pwd()
            return self.name+' 登录成功! '+self.__get_pwd()
    
    res_name = input('请输入您的账号:')
    res_pwd = input('请输入您的密码:')
    res_lg = Login(res_name, res_pwd)
    print(res_lg.login())
    print(res_lg.__dict__)                   # 但是也能看到它所有动态属性
    print(res_lg._Login__pwd)                # 但是也能看到它的属性
    # print(res_lg._get_pwd())               # __get_pwd是私有方法类外部调不到

     总结:

    • 所有的私有的 都不能在类的外部使用,虽然可以调;
    • 所有的私有都是在类的变量的左边加上双下划线:
    • --①对象的私有属性
    • --②类中的私有方法
    • --③类中的静态私有属性

    欢迎来大家QQ交流群一起学习:482713805 !!!

  • 相关阅读:
    Xcode的控制台调试命令
    android 分辨率自适应
    android 分辨率自适应
    android屏幕适配
    android屏幕适配
    最新版本的ADT使用问题
    最新版本的ADT使用问题
    UVa 1639 Candy (数学期望+组合数学+高精度存储)
    UVa 12230 && HDU 3232 Crossing Rivers (数学期望水题)
    HDU 1087 Super Jumping! Jumping! Jumping! (DP+LIS)
  • 原文地址:https://www.cnblogs.com/gsxl/p/12498040.html
Copyright © 2011-2022 走看看