1

以与我可以说的相同的方式记录一个类的 (private -> _x) 数据成员会很有帮助:

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

但是对于 Python(可以说我们在这里使用不同的编程模型),首选的方法是什么?当我想立即查看此类模型的内容时,通过引用隐式定义它们不会减少它。

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

4

2 回答 2

1

您可以使用文档字符串(三引号字符串)作为类或方法中的第一条语句;与文档字符串的标准格式最接近的东西被指定为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 ): ...
于 2012-06-22T18:34:39.917 回答
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 的理解。

于 2012-06-22T18:41:56.567 回答