在Python中,什么时候应该将对象作为参数传递,而不是使用点运算符调用对象上的方法?

在Python中,什么时候应该将对象作为参数传递,而不是使用点运算符调用对象上的方法?,python,Python,我知道点运算符正在访问特定于对象的方法,该对象是包含该方法/函数的类的实例。但是,在哪些情况下,您会直接在对象上调用函数,形式为func(obj),而不是obj.func()? 这两种技术是否都可以实现(至少在自定义代码中实现),或者在某些情况下,是否应该使用前者而不是后者,反之亦然 我以前读到过,表单func(obj)用于处理对象持有的数据,但是为什么执行obj.dataMember.func(),只传递对象是否有好处,例如易变性的一些变化?如果函数专门为该对象类型服务,那么你可能应该把它作为

我知道点运算符正在访问特定于对象的方法,该对象是包含该方法/函数的类的实例。但是,在哪些情况下,您会直接在对象上调用函数,形式为
func(obj)
,而不是
obj.func()
? 这两种技术是否都可以实现(至少在自定义代码中实现),或者在某些情况下,是否应该使用前者而不是后者,反之亦然

我以前读到过,表单
func(obj)
用于处理对象持有的数据,但是为什么执行
obj.dataMember.func()
,只传递对象是否有好处,例如易变性的一些变化?

如果函数专门为该对象类型服务,那么你可能应该把它作为类的一种方法;这需要
obj.func()
语法


如果该函数也适用于不属于该类的对象,则应使其成为常规函数,使用该函数执行泛化和区分。这需要语法
func(obj)

我对Python了解不多,但这不是一个全局规则,函数超出范围(意味着类的方法)会创建错误吗?使用
obj.func()
func
是类的成员,而
obj
是类的一个实例。使用
func(obj)
func
是一个全局函数。通常,如果函数与类的内部状态一起工作,或者您正在创建相关的逻辑函数分组,则可以将其作为类方法。@cdarke谢谢,这很有帮助。至于问题的第二部分,这是否意味着使用每个函数的实例总是由函数的编写方式决定(实例函数与全局函数)?是的。正如@Prune所说,对象方法(学究式的,与函数不同)可以访问“私有”属性,即使用双下划线前缀命名的属性(私有属性可以在类之外访问,但是好人不会这样做)。抱歉耽搁了,不同的时区。非常简洁和有用,真的帮助我理解。谢谢你的回答。