有没有办法在Python中标记类?

有没有办法在Python中标记类?,python,Python,假设我在Python模块中有一堆类。我想要一些方法来标记这些类,也许可以使用类似于装饰器的东西,这样我就可以从我的模块中只访问这些类。例如: class One: ... @marked class Two: ... @marked class Three: ... 我实际上想做的是在运行时以某种方式动态地将这些标记的类放入一个列表中。大概是这样的: marked_classes = [Two, Three] 在Python中实现这一点的理想方法是什么?谢谢注意:

假设我在Python模块中有一堆类。我想要一些方法来标记这些类,也许可以使用类似于装饰器的东西,这样我就可以从我的模块中只访问这些类。例如:

class One:
    ...

@marked
class Two:
    ...

@marked
class Three:
    ...
我实际上想做的是在运行时以某种方式动态地将这些标记的类放入一个列表中。大概是这样的:

marked_classes = [Two, Three]
在Python中实现这一点的理想方法是什么?谢谢注意:它不必是装饰师。我只是添加了这一部分来解释这个问题


编辑:需要记住的重要一点是,您不必知道类名,就可以获得标记类的列表。因此,类似于
标记的\u classes.append(两个)
的东西显然不起作用。

我建议将类放在包中的模块中

/package
    __init__.py
    module.py
然后在init.py文件中,将想要“public”的类分配给all变量列表

\uuuu init\uuuu.py:

from .module import Two, Three
__all__ = [Two, Three]
那么在调用它时:

script.py

from package import *
# or
from package import Two, Three

我建议将类放在包中的模块中

/package
    __init__.py
    module.py
然后在init.py文件中,将想要“public”的类分配给all变量列表

\uuuu init\uuuu.py:

from .module import Two, Three
__all__ = [Two, Three]
那么在调用它时:

script.py

from package import *
# or
from package import Two, Three

创建一个包含列表的类装饰器。在decorator中,您可以获取该类并将其添加到列表中

模块加载完成后,列表中应该有类

一些帮助:


创建一个包含列表的类装饰器。在decorator中,您可以获取该类并将其添加到列表中

模块加载完成后,列表中应该有类

一些帮助:


装饰师的编写相当简单

marked_classes = []


def mark(cls):
    marked_classes.append(cls)
    return cls


class One:
    ...


@marked
class Two:
    ...


@marked
class Three:
    ...

这个装饰师写起来相当简单

marked_classes = []


def mark(cls):
    marked_classes.append(cls)
    return cls


class One:
    ...


@marked
class Two:
    ...


@marked
class Three:
    ...


标记的类。附加(Foo)
?如果您愿意,可以将其包装在装饰器中…。@juanpa.arrivillaga请检查编辑。嗯,如果您没有装饰器的名称,您打算如何使用装饰器?那没有任何意义。如果你能做
@marked class Foo
,那么你就可以做
marked_class.append(Foo)
“只访问这些类”是什么意思还不清楚;如果可以导入模块,则可以访问全局范围内的任何名称。您只是想要一个容易访问的类子集分组吗?
marked\u classes.append(Foo)
?如果您愿意,可以将其包装在装饰器中…。@juanpa.arrivillaga请检查编辑。嗯,如果您没有装饰器的名称,您打算如何使用装饰器?那没有任何意义。如果你能做
@marked class Foo
,那么你就可以做
marked_class.append(Foo)
“只访问这些类”是什么意思还不清楚;如果可以导入模块,则可以访问全局范围内的任何名称。你只是想要一个容易访问的类子集分组吗?你可以用一些代码示例来扩展答案吗?为什么不简单地
marked_classes.append(Foo)
?@juanpa.arrivillaga职责分离:知道哪些类必须在列表中不是markers的职责。理想情况下,任何希望自己的类被“标记”的人都只需导入decorator并将其应用于类。。。与列表相同?任何人都可以导入和修改可变列表?您可以用一些代码示例来扩展答案吗?为什么不简单地
marked_classes.append(Foo)
?@juanpa.arrivillaga责任分离:知道哪些类必须在列表中不是markers的责任。理想情况下,任何希望自己的类被“标记”的人都只需导入decorator并将其应用于类。。。列表也一样?一个可变列表正在被任何想要它的人导入和修改?看到你的编辑,也许我不理解你的问题看到你的编辑,也许我不理解你的问题