【发布时间】:2018-03-30 15:42:33
【问题描述】:
假设我在文件中定义了一个类:
import stuff
import more stuff
import stuff that takes a long time to import
class Foo(object):
def __init__(self, arg1, arg2 etc.):
self.arg1 = arg1
self.arg2 = arg2
# Lots of other stuff
# Lots of methods
在另一个文件中我有这个代码:
from big_file import Foo
def do_stuff(obj):
if isinstance(obj, Foo):
do_stuff
else:
do_other_stuff
假设文件 Foo 由于我无法控制的原因需要很长时间才能导入。如何重构此代码以不导入 Foo 但仍可靠地检查类型?我认为鸭式打字不适合我的特殊情况。
我应该例如检查obj 基的字符串表示?还是有其他更规范的方法?
【问题讨论】:
-
obj.__class__.__name__ == 'Foo',但我永远不会这样做。你真的需要检查类型,而不是使用鸭子打字吗? -
您可以先在
sys.modules中查看big_file是否已导入。如果没有,那么您的对象不是Foo。如果有,您可以非常便宜地在现场导入它,然后在isinstance那里检查。 -
如果你有一个
Foo的实例,是否存在Foo定义的模块不会在sys.modules中的情况? (故意修改sys.modules除外) -
@mgilson 我想你正在做一些事情,你要写一个完整的答案吗?
标签: python python-2.6 typechecking