python依赖注入_python之类的执行过程,面向对象--依赖注入

类的本质,执行过程:

class Foo:

def __init__(self,name):

self.name =123

def f1(self):

print(self.name)

#解释器解析:

#1、遇到class Foo,执行type的__init__方法

#2、Type的init的方法里面做什么呢?

obj = Foo(123)

#3、执行Type的__call__方法

# 然后执行Foo类的__new__方法

# 最后执行Foo类的__init__方法

依赖注入,案例

class Mapper:

__mapper_relation ={}

@staticmethod

def register(cls,value): #把对象cls和参数value注册进去

Mapper.__mapper_relation[cls]=value

@staticmethod

def exist(cls): #判断这个cls是否存在__mapper_relation中

if cls in Mapper.__mapper_relation:

return True

return False

@staticmethod

def value(cls):

return Mapper.__mapper_relation[cls]

class MyType(type):

def __call__(cls, *args, **kwargs):

obj =cls.__new__(cls, *args, **kwargs)

# print('==========')

arg_list =list(args) #把cls的参数(元祖),转变成list对象

if Mapper.exist(cls):

value = Mapper.value(cls)

arg_list.append(value)

obj.__init__(*arg_list, **kwargs)

return obj

class Foo(metaclass=MyType):

def __init__(self,name):

print('----------')

self.name =name

def f1(self):

print(self.name)

class Bar(metaclass=MyType):

def __init__(self, name):

print('----------')

self.name = name

def f1(self):

print(self.name)

Mapper.register(Foo,'123') #这样Foo()就不需要加入参数了

Mapper.register(Bar,'456') #这样Bar()就不需要加入参数了

f = Foo()

print(f.name)

b = Bar()

print(b.name)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值