首页 > 解决方案 > Python中的方法与函数值字段

问题描述

我正在从 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 在后台工作的方式?

标签: pythonmethods

解决方案


第二个不能被覆盖并且占用更多空间,因为每个实例中都有一个单独的函数,__dict__而不是 class 中的一个函数__dict__。(如果您以正常方式执行实例方法对象,则会即时创建和回收,或者在许多情况下完全优化,具体取决于 Python 版本。)


推荐阅读