zoukankan      html  css  js  c++  java
  • Python之面向对象进阶知识

    1. 反射

      a. python面向对象中的反射:对象用字符串形式操作去实现对象的相关属性,把一个字符串数据类型的变量变成一个真实存在在程序中的变量名,并且能够使用它。

      b. 四个函数

        *. getattr(对象,字符串类型的方法或属性):方法得到的是方法的地址,属性拿到的是值。等价于对象/类.属性/方法。getattr是反射中最常用的方法。

        *. hasattr:查看对象是否有某种属性或方法

        *. setattr:给对象设置属性或方法

        *. delattr:删除对象的属性或方法

    class Person:
        def __init__(self,name):
            self.name = name
        def happy(self):
            print("%s is happy"%self.name)
    
    pe = Person("pe")
    func = getattr(pe,"happy")
    # 相当于jh.happy()
    func()
    
    # hasattr(对象,要去调用的属性或方法)--判断是否有这个属性
    if hasattr(pe,"sleep"):
        func = getattr(pe,"sleep")
        func()
    
    # 不常用--setattr() 设置属性
    setattr(pe,"sex","female")  # 添加属性
    print(pe.sex)
    
    def sleep(self):    # 添加方法,必须要传一个参数,非常不常用,一般不用
        print("%s is sleep"%self.name)
    setattr(pe,"sleep",sleep)
    pe.sleep(pe)
    
    # delatter--删一个属性  delattr(对象,属性名)
    delattr(pe,"sleep")     #删除属性
    print(pe.sleep)     # 报错
    

    2. 类的内置方法

      a. __str__和__repr__

        *. %s 和 __str__ 一样,%r 和 __repr__ 一样

        *. __repr__是__str__的备胎,可以替代__str__,但__str__不能替代__repr__,在只能实现一个方法是优先实现__repr__

      b. __del__ 析构方法:在程序执行完成后,自动执行。主动触发,立马执行,和del一样

      c. __call__:对象()--自动触发

      d. __eq__:== 自动触发

      e. __hash__:hash 自动触发

      f. item:都是用 对象[] 去触发

        *. __getitem__:调用属性或方法

        *. __setitem__:创建属性或方法

        *. __delitem__:删除属性或方法

      g. __new__:创造对象self,在类里边默认先执行__new__方法

    class A:
      def __new__(cls, *args, **kwargs):
        pass
      def __init__(self):
        pass
    

    3. 单例模式:实例始终只有一个,它的属性随设置而改变
    class Teacher:
        __isinatance = None
        def __new__(cls, *args, **kwargs):
            if not cls.__isinatance:
                cls.__isinatance = object.__new__(cls)
            return cls.__isinatance
    
        def __init__(self,name,cloth):
            self.name = name
            self.cloth = cloth
    
    liu = Teacher("liu","1")
    liu2 = Teacher("liu","2")
    liu3 = Teacher("liu","3")
    print(liu)
    print(liu2)
    print(liu3)
    
    
    
    














  • 相关阅读:
    04构建之法阅读笔记之四
    冲刺周期第十天
    冲刺周期第九天
    第二阶段冲刺--每日立会(4)
    第二阶段冲刺--每日立会(3)
    第二阶段冲刺--每日立会(2)
    第二阶段冲刺--每日立会(1)
    第十二周学习记录表
    第一阶段冲刺--每日立会(10)
    第一阶段冲刺--每日立会(9)
  • 原文地址:https://www.cnblogs.com/chitalu/p/12362462.html
Copyright © 2011-2022 走看看