Python 如何在指定类时引用类蓝图作为函数中的参数';论据?
以下是设置Python 如何在指定类时引用类蓝图作为函数中的参数';论据?,python,python-3.x,parameter-passing,Python,Python 3.x,Parameter Passing,以下是设置 class SomeClass(): def __init__(self): pass def some_func1(self, paramA): some_input = paramA print(some_input) class SomeOtherClass(): def __init__(self, param1, param2): self.param1 = param1
class SomeClass():
def __init__(self):
pass
def some_func1(self, paramA):
some_input = paramA
print(some_input)
class SomeOtherClass():
def __init__(self, param1, param2):
self.param1 = param1
self.param2 = param2
obj = SomeClass()
# Scenario #1
some_var = obj.some_func1(paramA=SomeOtherClass)
# <class '__main__.SomeOtherClass'>
# Scenario #2
some_other_var = obj.some_func1(paramA=SomeOtherClass(param1='val1', param2='val2'))
# <__main__.SomeOtherClass object at 0x000002576E88FD60>
class SomeClass():
定义初始化(自):
通过
定义一些函数1(self,paramA):
某些输入=参数
打印(某些输入)
类SomeOtherClass():
定义初始化(self,param1,param2):
self.param1=param1
self.param2=param2
obj=SomeClass()
#情景1
some_var=obj.some_func1(paramA=SomeOtherClass)
#
#情景2
some_other_var=obj.some_func1(paramA=SomeOtherClass(param1='val1',param2='val2'))
#
问题是在我的实际示例中,这两种配置都不起作用。在场景1中,SomeOtherClass
被somefunc1
的paramA
参数引用。在场景2中,指定了实例化SomeOtherClass
所需的参数,但问题是我不想在参数级别实例化它
如何引用(而不是实例化)具有指定参数值的
SomeOtherClass
,作为函数参数的值?延迟某项计算(包括对象实例化)的简单方法是将其包装在lambda
中:
class SomeClass():
def some_func1(self, thunk):
"""thunk: a callable that takes no args and constructs an object."""
print(thunk)
obj = thunk() # this actually instantiates the object
print(obj)
class SomeOtherClass():
def __init__(self, param1, param2):
self.param1 = param1
self.param2 = param2
obj = SomeClass()
some_var = obj.some_func1(lambda: SomeOtherClass('val1', 'val2'))
如果出于其他目的需要将类和参数作为不同的参数,可以执行以下操作:
def some_func1(self, obj_class, *params):
print(obj_class, params)
obj = obj_class(*params)
print(obj)
some_func1(SomeOtherClass, 'val1', 'val2')
你希望它实际做什么?也就是说,一旦你得到了类和参数,如果不实际实例化对象,你想对它们做什么?我只想引用
SomeOtherClass
,并将其作为函数参数引用。我想稍后在some_func1
中实例化它。也许只需传入一个创建对象的thunk(一个lambda
表达式),然后呢?我会写一个答案来证明这一点。