专栏首页python3Python学习 :反射 & 单例模式

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)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python3快速入门(六)——Pyth

    面向对象编程(Object Oriented Programing,OOP)是一种编程思想,OOP把对象当成程序的一个基本单元,一个对象包含数据和操作数据的方法...

    py3study
  • Python Day7

    是一种新建类的方式,新建的类称为子类,子类会遗传父亲的属性,可以减少代码冗余 在python当中,子类(派生类)可以继承一个或多个父类(基类,超类)

    py3study
  • python3--尝试写一个三级菜单

    py3study
  • 面向对象:接口思想、多态、鸭子类型、反射

      相当于我们在父类中定义一个统一的多个共同形态的方法,比如人狗猪都能吃跑叫这些方法,我们在父类将其方法进行抽象,即抽象方法,这种方法的实现体是抽象的,也就是说...

    py3study
  • Python 类的继承与多态

    在面向对象编程中类的继承是一个需要掌握的要点。当我们定义一个类时可以继承自一个已经定义好的类,新的类成为子类,被继承的类成为父类或超类。子类将自动获取父类的属性...

    keinYe
  • 11 Python 基础: 知识巩固,实现一个简易学生管理系统

    首先,我们定义了一个LoginModule类,此为登录模块,主要功能就是定义账号属性【用户名,密码】,然后定义一个登录login方法实现验证用户名和密码是否正确...

    小Gy
  • python数据库-MySQL与python的交互(52)

    2.创建testMySQL.py模块对我们创建的MySQLManager.py模块测试

    Se7eN_HOU
  • Python进阶-面向对象

    类的成员 类的成员可以分为三类:字段、方法、属性 一:字段: 普通字段和静态字段,他们在定义和使用中有所区别,而最本质的区别是内存中保存的位置不同 普通字段属于...

    洗尽了浮华
  • 深入理解Python面向对象-类特殊成员

    类的所有成员在上一篇已经做了详细的介绍,对于每一个类的成员都有两种形式:公有成员、私有成员。成员定义是以双下划线开头,就是私有成员。除了一些特殊成员除外,例如:...

    星星在线
  • python实例化对象的具体方法

    python中同样使用关键字class创建一个类,类名称第一个字母大写,可以带括号也可以不带括号;python中实例化类不需要使用关键字new(也没有这个关键字...

    砸漏

扫码关注云+社区

领取腾讯云代金券