反射 单例模式

反射&函数vs方法

反射(通过字符串去操作一个对象)

## 反射类中属性和方法
class A:
    name = 'laozi'
    def func(self):
        print(self.func)


print(hasattr(A(),'func'),
getattr(A(),'func'))
hasattr(A(),'func')
getattr(A,'func')
obj = A()
setattr(obj,'age',19)
print(getattr(obj,'age'))
反射多应用于用户输入导航条
## 反射当前模块的函数

class Auth:

    def login(self):
        print('登录函数')


    def register(self):
        print('注册函数')


    def exit(self):
        print('退出...')

obj = Auth()
s = 'login'
getattr(obj,s)()

java的反射

分辨函数和方法(区别在于隐式传参和显示传参)

from types import FunctionType
from types import MethodType

def func():
    pass
class A:
    def func1(self):
        pass
a = A()
print()
print(isinstance(func,FunctionType)) ## True

print(isinstance(A.func1,FunctionType)) # True
print(isinstance(a.func1,FunctionType)) # false  传参的区别

双下方法

__new__ 构造方法 创造并返回一个新对象
__init__ 空间赋值

单例模式

class A:
    __status = None

    def __new__(cls, *args, **kwargs):
        if not cls.__status:
            cls.__status = object.__new__(cls)
        return cls.__status


a = A()
a1 = A()
print(a)
print(a1)


posted on 2019-07-13 15:46  _albert  阅读(148)  评论(0编辑  收藏  举报