python类设计:直接在方法中使用成员变量或将成员变量传递给方法?

时间:2016-12-17 19:42:46

标签: python design-patterns

只是好奇,以下模式的优点和缺点是什么?

模式1

class Myclass:
    def __init__(self):
        self.val = "foo"
        self.process()
    def process(self):
        #do_sth on self.val

模式2

class Myclass:
    def __init__(self):
        self.val = "foo"
        self.process(self.val)
    def process(self, val):
        #do_sth on val

哪一个更好,为什么?

感谢!!!

2 个答案:

答案 0 :(得分:1)

通常,模式1:将实例属性收集在一起作为一个对象的属性的目的是通过传递一个对象将它们共同传递给函数。因此,设置(或重置)值会为所有使用它的方法设置(或重置)它。

另一方面,模式2允许用户使用其他值调用:user_id

第三方面,如果process没有使用任何self.x值,那么没有理由通过它process它可能应该是一个独立的函数而不是{{1 }} 方法。或者,如果self永远不会被MyClass访问,那么它不应该是实例变量。

一个类应该是属于一个的值和函数的集合,因为它们实现了一个概念或模型真实世界的对象集。

答案 1 :(得分:0)

第二个" 模式2 "是多余的,因为它意味着当它已经是实例属性时传递和访问参数self.val
无需传递实例的 local 属性内部方法的参数 - 它可以在类中的任何位置访问。
当然,它仅适用于process方法只应处理当前实例的情况#39; s属性