zoukankan      html  css  js  c++  java
  • Python学习 :反射 & 单例模式

     反射

      什么是反射?

      - 反射主要是指程序可以访问、检测和修改它本身状态或行为的一种能力(自省)

      面向对象中的反射

      - 通过字符串的形式来操作(获取、检查、增加、删除)对象中的成员

      - python中的一切事物都是对象(都可以使用反射)

      四个可以实现自省的函数:

      - getattr()   获取属性

      - hasattr()  判断对象中是或否拥有特定的值

      - setattr()   设置属性

      - delattr(obj,'gender')  删除属性

    class Info:
    
         def __init__(self,name,age,gender):
             self.name = name
             self.age  = age
             self.gender = gender
         def show(self):
             return '%s - %s' %(self.name,self.age)
    
    obj = Info('alex','20','男')
    
    b = 'name'
    print(obj.__dict__[b])
    print(obj.__dict__['name'])
    
    #getattr()
    inp = input('请输入想要获取的内容:')
    v = getattr(obj,inp)
    print(v)
    
    func = getattr(obj,'show')
    v = func()
    print(v)
    
    #hasattr()
    print(hasattr(obj,'name'))
    
    #setattr()
    setattr(obj,'k1','v1')
    
    #delattr(obj,'gender')
    obj.gender  # 此时报错,Info类中的gender对象已被删除
    

      操作类对象:

    class Info(object):
        staticField = "Hello World!"
    
        def __init__(self):
            self.name = 'mike'
    
        def func(self):
            return 'func'
    
        @staticmethod
        def bar():
            return 'bar'
    
    print(getattr(Info, 'staticField'))
    print(getattr(Info, 'func'))   # 返回函数的内存地址
    print(getattr(Info, 'bar'))    # 返回函数的内存地址
    

     

     单例模式

      什么是单例模式?

      - 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保一个类只有一个实例存在。

      - 当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场。

      - 单例,永远使用同一份实例(对象)。单例模式能够有效地节约内存资源。

      实现单例模式:

    class Info:
        __v = None
    
        @classmethod
        def get_instance(cls):
            if cls.__v:
                return cls.__v
            else:
                cls.__v = Info()
                return cls.__v
    
    obj1 = Info.get_instance()
    print(obj1)
    obj2 = Info.get_instance()
    print(obj2)
    
  • 相关阅读:
    排序算法
    各种容器
    avl树
    zhenya moves from parents
    maven 相关
    Spring Cloud 子项目介绍
    WebStorm 中 dva 项目用 start 命令需要不断重启项目问题
    git常用命令
    SQL 的各种 join 用法
    程序员成长过程
  • 原文地址:https://www.cnblogs.com/ArticleYeung/p/10562744.html
Copyright © 2011-2022 走看看