我有一个带两个函数的导入模块
def kind1(paramA, paramB)
...
def kind2(paramA, paramB)
我随机将这两个函数中的一个通过构造函数传递给对象。你知道吗
object = Constructor(param1, param2, function)
现在与
>>> print object.function
我明白了
function kind1 at 0xb124...
或者
function kind2 at 0xb1464...
我怎样才能确认对象.函数是第1类还是第2类?你知道吗
我试过了
if object.function == kind1:
print 'kind1'
elif object.function == kind2:
print 'kind2'
和
if object.function == kind1():
print 'kind1'
elif object.function == kind2():
print 'kind2'
我也试过了
if isinstance(object.function, kind1):
print 'kind1'
elif isinstance(object.function, kind2):
print 'kind2'
但他们显然不起作用。 做这个检查的正确方法是什么?你知道吗
使用^{} 函数检查对象标识:
请注意,使用
fn.__name__
可能是可接受的,也可能是不可接受的,这取决于您的特定系统(在某些系统中,这将被视为安全风险):如果必须依赖名称而不是id(例如,如果将函数传递给子进程或远程进程),则至少使用read-only code object中的安全路径:
如果您想知道恶意函数的花哨名称,请查看维基百科的Alice and Bob。你知道吗
您的代码示例与所描述的行为不匹配,将函数对象指定给属性不会更改该对象的标识:
我认为您需要将函数(方法)称为
ObjectInstance.kind1
和ClassOfObject.kind1
自
type(ClassOfObject.kind1) == <class 'function'>
和type(ObjectInstance.kind1) == <class 'method'>
并且有不同的地址很难直接比较,一个解决方法是使用一些属性来比较它(比如.__name__
或者创建自己的属性)相关问题 更多 >
编程相关推荐