我正在尝试理解Python OOP中的最佳实践。
我非常熟悉Java风格的工作流程:
我喜欢的是它在我看来提高了可读性:通过简短地查看属性,你就可以确切知道你将在课堂上工作。
我想在Python中实现相同的结果,虽然我知道在Python中没有“变量声明”这样的东西,但也许某种设计模式可以做同样的事情。
到目前为止,我的中间解决方案是在__init__
方法中“声明”,其中包含:
def __init__(self):
self.attribute1 = None
self.attribute2 = None
稍后在后续方法中实例化这些元素。 但我发现它相当丑陋,我很高兴听到更优雅的模式。
答案 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>