Python-检查类是否存在

2024-06-19 19:26:47 发布

您现在位置:Python中文网/ 问答频道 /正文

是否有方法检查类是否已定义/存在? 我在菜单上有不同的选项,其中一些选项需要继承变量,所以如果在设置变量之前尝试选择该函数,它会崩溃。 我的课程叫做Gen0,我开始的时候只是

class Gen0():

接下来是设置变量的其余代码。 对于上下文,我正在执行填充模型,因此在显示(选项2)、使用(选项3)或导出(选项4)它们之前,需要设置初始值(选项1)。


Tags: 方法函数代码模型定义选项菜单class
3条回答

与其检查变量是否存在,不如使用EAFP解决方案。例如:

try:
   print(var)
except NameError:
   var = 2
   print(var)

如果在这段代码之前没有定义var,它将把它分配给2print

我猜gen0是这样定义的:

class gen0:
    pass

而不是在对象创建时初始化类中的属性

class gen0:
    def __init__(self):
        # this function will be run when you call "g = gen0()"
        # in the main body of you code. and the following properties 
        # will be set on object "g"
        self.juvenile_population = 0
        self.juv.... etc

所以我猜,当你试图在设置前访问类似juvenile_population的内容时,你得到的是AttributeError

正确初始化类是进行面向对象编程的最佳方法。

然而,你的问题的字面答案是:

 g = gen0()
 if "juvenile_population" in dir(g):
      .... etc

请注意,这只检查对象是否具有juvenile_population属性,您需要更多的这些语句来检查每个属性,类似地,您可以在Douglas' answer中使用EAFP方法,但同样地,这将使用try语句大量地扩展您的代码。

你的情况还不完全清楚,所以我要回答一个问题:“有没有办法检查类是否已经定义/存在?”

是的,有一些方法可以检查类是否已在当前作用域中定义。我先看几遍。

一。请求原谅总比允许好

试着用它!

try:
    var = MyClass()
except NameError:
    # name 'MyClass' is not defined
    ...

这可能是最Pythonic的方法(除了确保您已经导入/定义了类之外)。

2。透视当前范围

当前作用域中的所有内容都由dir()给出。当然,这不能处理进口的东西!(除非直接导入。)

if not 'MyClass' in dir():
    # your class is not defined in the current scope
    ...

三。检查模块的内容

也许您想看看该类是否在特定模块my_module中定义。所以:

import my_module
import inspect

if not 'MyClass' in inspect.getmembers(my_module):
    # 'MyClass' does not exist in 'my_module'
    ...

现在,值得指出的是,如果您在生产代码中使用这些类型的东西,您的代码可能写得很糟糕。您应该始终知道在任何给定点上哪些类在作用域中。毕竟,这就是为什么我们有import语句和定义。我建议你用更多的示例代码来整理你的问题,以便得到更好的回答。

相关问题 更多 >