反射&函数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)