【问题标题】:Method vs function-valued field in Python [duplicate]Python中的方法与函数值字段[重复]
【发布时间】: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/…

标签: python methods


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2013-08-14
    • 2013-04-19
    • 2020-02-16
    • 2020-12-11
    • 2015-04-25
    • 2017-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多