gpt4 book ai didi

Python:在定义类之前在模块中查找类

转载 作者:太空狗 更新时间:2023-10-30 01:53:44 25 4
gpt4 key购买 nike

我在模块中有一个 python 类,其中有一些方法需要在同一模块中包含某些其他类的列表。这是我现在的做法:

模块.py

class Main:
@staticmethod
def meth1():
for c in classes:
#do something

@staticmethod
def meth2():
for c in classes:
#do something

class Class1:
pass

class Class2:
pass

class Class3:
pass

classes = [Class1, Class3]

有几点我想改进:

  1. 我想把 classes列出更普遍的地方。理想情况下,要么在所有类之外,但在模块文件的顶部,要么作为 Main 的类属性, 但在 meth1 之外或 meth2 .这样做的目的是在有人需要添加另一个类定义时更容易找到。
  2. 如果可能,我想以编程方式执行此操作,这样我就不需要在开始时明确定义列表。这消除了对#1 的需求(尽管我仍然希望它流行)。为此,我需要一种方法来列出同一模块中定义的所有类。我最接近的是 dir()locals() ,但它们也列出了导入的类、方法和模块。另外,我需要一些方法来识别我想要的类。我可以只使用类中的一个属性来做到这一点,但如果有更优雅的方式,那就太好了。

我正在尝试做的事情是否可行?

最佳答案

就个人而言,我会使用 decorator标记重要的类。您可以将包含它们的列表放在文件顶部显眼的位置。

这是一个简单的例子:

# Classes are added here if they are important, because...
important_classes = []


def important(cls):
important_classes.append(cls)
return cls


@important
class ClassA(object):
pass


class ClassB(object):
pass


@important
class ClassC(object):
pass

# Now you can use the important_classes list however you like.
print(important_classes)
# => [<class '__main__.ClassA'>, <class '__main__.ClassC'>]

关于Python:在定义类之前在模块中查找类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36801448/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com