我有一个装饰器,它包装函数并生成类(出于比以下示例更好的原因)。这一切都有效,除了我希望能够设置type().
例如,
>>> class Animal:
... pass
...
>>> def linnean_name(genus, species):
... def _linnean_name(fn):
... class _Animal(Animal):
... binomial_name = (genus, species)
... def converse(self):
... fn()
... _Animal.__name__ = fn.__name__.title()
... _Animal.__module__ = fn.__module__
... return _Animal
... return _linnean_name
...
>>> @linnean_name('Vombatus', 'ursinus')
... def Wombat():
... print("Hello, I am a wombat.")
...
>>> sheila = Wombat()
>>> sheila.binomial_name
('Vombatus', 'ursinus')
>>> sheila.converse()
Hello, I am a wombat.
Run Code Online (Sandbox Code Playgroud)
一切都很好,但是
>>> type(sheila)
<class '__main__.linnean_name.<locals>._linnean_name.<locals>._Animal'>
Run Code Online (Sandbox Code Playgroud)
我希望看到的地方
<class …Run Code Online (Sandbox Code Playgroud) 给定类型的名称,有没有办法获取类型对象?因此,例如:
get_type('str') -> str
Run Code Online (Sandbox Code Playgroud)
我正在构建一个dict映射到一个类的各种案例,该类应该被实例化以处理它们。进口所有东西并冒循环进口的风险似乎有点过分。所以我想我可以用字符串指定它们,并在使用时查找类型。但是我如何查找类型?
以前似乎不太可能没有人问过这个问题,但我已经搜索过但没有找到。