zoukankan      html  css  js  c++  java
  • python之路--day22--多态....property..calssmethod....staticmethod

    1,什么是多态

      多态指的是同一种事物多种形态

    2,为什么要用多态

      用基类创建一套统一的规则,强制子类去遵循(使用抽象类实现---就是继承),这样便可以在

    不用考虑对象具体类型的前提下而直接使用对象下的办法

    3,如何使用多态

      使用 import  abc  ##abstract class ----抽象类来实现多态

    import abc
    class Aniaml:
        @abc.abstractclassmethod  #强制要求子类必须有同名属性
        def talk(self):
            pass
    
    class People(Aniaml):
        def talk(self):
            print('hahahaha')
    class Cat(Aniaml):
        def talk(self):
            print('miaomiaomiao')
    class Dog(Aniaml):
        def talk(self):
            print('wangwangwang')
    如何使用多态

      需要注意的是:使用  abc方法抽象基类后,基类就不能实例化,否则报错

    多态性:就是在不考虑对象的具体类型的情况下,直接使用对象下的方法

        理解:在使用的多态的前提下,那么不同的对象下都有一个或多个同名的方法,

          那么调用者发生同样的一条指令,不同的对象就会根据这条同样的指令,返回不同的结果

      多态性的好处:

        1,增强程序的灵活性

        2,增加程序的可扩展性

    鸭子类型:python崇尚简洁自由,鸭子类型就是在多态表现为:看起来是多态,但没有使用 abstract class(抽象类)来强制规定为多态,

      所以鸭子类型就是 ‘如果看起来像、叫声像而且走起路来像鸭子,那么它就是鸭子’---看起来想什么,那么就是什么

      保持了程序的松耦合度

    封装之property:本质是装饰器,在函数头部单独一行,@property

      就是把类的一个函数属性伪装成数据属性。

      

    class People:
        def __init__(self,name):
            self.__name =name #封装属性,不让外部直接访问
        
        @property
        def name(self):  #obj.name 伪装之后,无法直接修改
            print('你现在访问的是用户名。。。')
            return self.__name
        
        @name.setter
        def name(self,x): #obj.name = x  使用property的setter方法实现修改 
            self.__name = x
            
        @name.deleter
        def name(self):
            del self.__name
    @property的使用

    classmethod

      当类内部函数不需要给对象使用,你需要自动传入self,而且该函数需要给class使用,那么可以使用classmethod来实现自动传入类名

      

    import setting
    
    class People
    
        def __init__ (self,name,age):
            self.name =name
            self.age =age
    
        def tell(self):
            print('%s:%s' %(self.name,self.age))
       
        @classmethod
        def from_conf(cls):
                return cls(setting.NAME,setting.AGE)
    
    
        
        
                   
    @classmethod的使用

    staticmethod: 将类的函数属性,装饰为普通函数

      特征:既不和类绑定,也不和对象绑定,就是说谁来用都是一个普通函数,没有了自动传值的特性

      

    import settings
    import hashlib
    import time
    
    class People:
        def __init__(self,name,age):
            self.uid=self.create_id()
            self.name=name
            self.age=age
    
        def tell(self):
            print('%s: %s:%s' %(self.uid,self.name,self.age))
    
        @classmethod
        def from_conf(cls):
            return cls(settings.NAME,settings.AGE)
    
        @staticmethod
        def create_id():
            m=hashlib.md5()
            m.update(str(time.clock()).encode('utf-8'))
            return m.hexdigest()
    staticmethod的使用
  • 相关阅读:
    python-异常处理总结
    python-笔记-内置函数
    python练习题--计算总分平均分操作excel
    python-笔记(操作excel)
    python -加密(MD5)
    jmeter-http信息头管理器
    python-判断一个字符串是不是小数
    [Python] [Django] Django将post请求变成get
    离线安装rabbitmq
    python第三方包的几种安装方式
  • 原文地址:https://www.cnblogs.com/guodengjian/p/8856156.html
Copyright © 2011-2022 走看看