Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python类设计:直接在方法中使用成员变量还是将成员变量传递给方法?_Python_Design Patterns - Fatal编程技术网

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

python类设计:直接在方法中使用成员变量还是将成员变量传递给方法?,python,design-patterns,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(se

只是好奇,以下模式的利弊是什么

模式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”是多余的,因为它意味着在已经是实例属性的情况下传递和访问参数
self.val

无需将实例的本地属性作为参数传递给内部方法-它可以在类中的任何位置访问。
当然,只有当
process
方法应该只处理当前实例的属性时,才会出现这种情况。一般来说,模式1:将实例属性作为一个对象的属性收集在一起的目的是通过传递一个对象将它们集体传递给函数。因此,设置(或重置)该值将为所有使用该值的方法设置(或重置)该值

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

第三方面,如果
process
没有使用任何self.x值,那么就没有理由传递它
self
,它可能应该是一个独立的函数,而不是
MyClass
方法。或者,如果从未将
val
作为
self.val
访问,则它不应是实例变量

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