有什么方法可以在Python中标记类?

时间:2019-04-04 16:17:31

标签: python

让我们说我在Python模块中有一堆类。我想要一些标记这些类的方法,也许使用装饰器之类的方法,以便我只能从我的模块中访问这些类。例如:

class One:
    ...

@marked
class Two:
    ...

@marked
class Three:
    ...

我真正想做的是在运行时以某种方式动态地将这些标记的类放在列表中。像这样:

marked_classes = [Two, Three]

在Python中执行此操作的理想方法是什么?谢谢。注意:它不必是装饰器。我只是添加了那一部分来解释这个问题。

编辑:需要记住的重要一点是,您不必知道类名即可真正获得已标记类的列表。因此类似marked_classes.append(Two)之类的东西显然是行不通的。

3 个答案:

答案 0 :(得分:1)

创建一个内部带有列表的类装饰器。在装饰器中,您可以选择该类并将其添加到列表中。

模块加载完成后,您应该在列表中包含这些类。

一些帮助:

https://www.codementor.io/sheena/advanced-use-python-decorators-class-function-du107nxsv

Python decorating class

答案 1 :(得分:1)

装饰器的编写非常简单。

marked_classes = []


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


class One:
    ...


@marked
class Two:
    ...


@marked
class Three:
    ...

答案 2 :(得分:0)

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

/package
    __init__.py
    module.py

然后在您的 init .py文件中将您要“公开”的类分配给 all 变量列表

__init__.py:

from .module import Two, Three
__all__ = [Two, Three]

然后在调用它时:

script.py

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