2024-06-19 19:26:47 发布
网友
是否有方法检查类是否已定义/存在? 我在菜单上有不同的选项,其中一些选项需要继承变量,所以如果在设置变量之前尝试选择该函数,它会崩溃。 我的课程叫做Gen0,我开始的时候只是
class Gen0():
接下来是设置变量的其余代码。 对于上下文,我正在执行填充模型,因此在显示(选项2)、使用(选项3)或导出(选项4)它们之前,需要设置初始值(选项1)。
与其检查变量是否存在,不如使用EAFP解决方案。例如:
try: print(var) except NameError: var = 2 print(var)
如果在这段代码之前没有定义var,它将把它分配给2和print。
var
2
print
我猜gen0是这样定义的:
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。
juvenile_population
AttributeError
正确初始化类是进行面向对象编程的最佳方法。
然而,你的问题的字面答案是:
g = gen0() if "juvenile_population" in dir(g): .... etc
请注意,这只检查对象是否具有juvenile_population属性,您需要更多的这些语句来检查每个属性,类似地,您可以在Douglas' answer中使用EAFP方法,但同样地,这将使用try语句大量地扩展您的代码。
try
你的情况还不完全清楚,所以我要回答一个问题:“有没有办法检查类是否已经定义/存在?”
是的,有一些方法可以检查类是否已在当前作用域中定义。我先看几遍。
试着用它!
try: var = MyClass() except NameError: # name 'MyClass' is not defined ...
这可能是最Pythonic的方法(除了确保您已经导入/定义了类之外)。
当前作用域中的所有内容都由dir()给出。当然,这不能处理进口的东西!(除非直接导入。)
dir()
if not 'MyClass' in dir(): # your class is not defined in the current scope ...
也许您想看看该类是否在特定模块my_module中定义。所以:
my_module
import my_module import inspect if not 'MyClass' in inspect.getmembers(my_module): # 'MyClass' does not exist in 'my_module' ...
现在,值得指出的是,如果您在生产代码中使用这些类型的东西,您的代码可能写得很糟糕。您应该始终知道在任何给定点上哪些类在作用域中。毕竟,这就是为什么我们有import语句和定义。我建议你用更多的示例代码来整理你的问题,以便得到更好的回答。
与其检查变量是否存在,不如使用EAFP解决方案。例如:
如果在这段代码之前没有定义
var
,它将把它分配给2
和print
。我猜
gen0
是这样定义的:而不是在对象创建时初始化类中的属性
所以我猜,当你试图在设置前访问类似
juvenile_population
的内容时,你得到的是AttributeError
。正确初始化类是进行面向对象编程的最佳方法。
然而,你的问题的字面答案是:
请注意,这只检查对象是否具有
juvenile_population
属性,您需要更多的这些语句来检查每个属性,类似地,您可以在Douglas' answer中使用EAFP方法,但同样地,这将使用try
语句大量地扩展您的代码。你的情况还不完全清楚,所以我要回答一个问题:“有没有办法检查类是否已经定义/存在?”
是的,有一些方法可以检查类是否已在当前作用域中定义。我先看几遍。
一。请求原谅总比允许好
试着用它!
这可能是最Pythonic的方法(除了确保您已经导入/定义了类之外)。
2。透视当前范围
当前作用域中的所有内容都由
dir()
给出。当然,这不能处理进口的东西!(除非直接导入。)三。检查模块的内容
也许您想看看该类是否在特定模块
my_module
中定义。所以:现在,值得指出的是,如果您在生产代码中使用这些类型的东西,您的代码可能写得很糟糕。您应该始终知道在任何给定点上哪些类在作用域中。毕竟,这就是为什么我们有import语句和定义。我建议你用更多的示例代码来整理你的问题,以便得到更好的回答。
相关问题 更多 >
编程相关推荐