【发布时间】:2020-10-10 03:46:51
【问题描述】:
我正在从 MATLAB 切换到 Python 和 numpy,我想知道定义类方法的选项和类字段(实例变量)的函数选项之间是否有任何区别?示例如下:
class MyClass:
def __init__(self, a):
self.a=a #some variable
def add(self,b):
return self.a+b
对
class MyClass:
def __init__(self, a):
self.a=a #some variable
self.add = lambda b: self.a+b
当我打电话时它在这两种情况下都有效
my_object=MyClass(2)
print(my_object.add(2)) #prints 4
这两种方法有什么不同吗?任何最佳实践/缺点? 对我来说,第一个感觉更“正确的 OOP”,但第二个感觉更灵活。或者,也许定义是相同的,因为 Python 在后台工作的方式?
【问题讨论】:
-
第一个是方法,第二个只是一个函数,是一个属性。请注意,对于方法,类上的单个函数对象,而如果将函数分配给属性,则每个实例都存在单独的函数对象。
-
最佳实践是不要使用
lambda函数并将其分配给变量,请参见此处:stackoverflow.com/questions/25010167/…。