Python中结构成员的等价物(主要用于文档和阅读代码)

时间:2012-06-22 18:29:07

标签: python documentation member

记录(private - > _x)数据成员会很有帮助 我可以说同样的一个课程:

struct foo {
  foo* p_a /* Documentation */
  foo ** pp_b /* Documentation */
};

但是对于Python(可以说我们处于不同的编程中) 这里的模型)这样做的首选方式是什么?隐 通过引用定义它们不会在我想要的时候削减它 立刻看看这个班的模特。

这对于直接转换为UML也很有用 图等。

2 个答案:

答案 0 :(得分:1)

您可以使用docstring(三引号字符串)作为类或方法中的第一个语句;与文档字符串标准格式最接近的内容指定为PEP 257

class foo( object ):
    """
    This is a foo.
    _a is foo's a; there are many like it but this one is foo's.
    _b is foo's b and demons may fly out of your nose if you modify it.
    """

    def __init__( self ): ...

答案 1 :(得分:1)

你是对的,Python 一种不同的编程模型。要理解的是,在Python中,当你看到这个时:

class Foo(object):
    ...

这不是真的“类声明”。它更像是一种“阶级创造”。在解释器到达class..行的那一刻,而不是之前,会创建类对象并使其准备就绪。关于这个类对象的一件事是基本上对它的实例一无所知

该类唯一可以访问实例(并且数据成员通常位于实例上)的时间是它实际运行的方法。语法如下:

def bar(self, x):
    ...

很有意思。 显式第一个参数有点暗示正在发生不同的事情。这是对的:当你写instance.bar(x)时,真正发生的是Foo.bar(instance, x)

意味着Foo获得实例的唯一机会就是使用方法。

因此,如果您需要显式类模型,最好的选择可能是明确地将其列出__init__方法。

class Foo(object):
    def __init__(self):
        self._bar = None  # Bar is an important "private" member
        self._baz = None  # As is baz
        self._fizzbuzz = 4  # Of course, you can also provide defaults here

如果我不在这里,我希望得到纠正 - 但这就是我目前理解Python的方式。