类中的Java风格变量声明

时间:2014-06-18 11:09:32

标签: python coding-style variable-declaration

我正在尝试理解Python OOP中的最佳实践。

我非常熟悉Java风格的工作流程:

  1. 属性声明
  2. 属性实例化
  3. 我喜欢的是它在我看来提高了可读性:通过简短地查看属性,你就可以确切知道你将在课堂上工作。

    我想在Python中实现相同的结果,虽然我知道在Python中没有“变量声明”这样的东西,但也许某种设计模式可以做同样的事情。

    到目前为止,我的中间解决方案是在__init__方法中“声明”,其中包含:

    def __init__(self):
        self.attribute1 = None
        self.attribute2 = None 
    

    稍后在后续方法中实例化这些元素。 但我发现它相当丑陋,我很高兴听到更优雅的模式。

2 个答案:

答案 0 :(得分:5)

声明输入的最佳位置是在类docstring中:

class Foo(object):
    '''
    This class of object is instantiated with variables that are attributes:

    attribute1 should be a string
    attribute2 should be a tuple of length two for your parameters:
    '''
    def __init__(attribute1=None, attribute2=None): 
        self.attribute1 = attribute1
        self.attribute2 = attribute2

当有人拨打help(Foo)时,会打印文档字符串。这将被实例化并引用:

help(Foo)
my_foo = Foo('bar', ('baz', 42))
help(my_foo)

请注意,由于我们为属性提供了None的默认值,因此我们可以在没有给定属性的情况下实例化对象,并稍后使用is None检查它们的实例化。

答案 1 :(得分:0)

在Python 3.x中,您可以使用"Function Annotations"在参数和返回值上添加元数据:

class Demo():

    def __init__(self, attribute1: str, attribute2: "int - number of foos" = 0):
        self.attribute1 = attribute1
        self.attribute2 = attribute2

    def foo(self) -> int:
        return self.attribute2

这些都没有强制执行(没有第三方库),但确实为类的用户提供了有用的信息(例如,在IDE和help(Demo)提供的信息中显示为工具提示)。 / p>