Python 带变量的嵌套函数与 Class?

Python Nested Function with Variables vs. Class?

Python 带变量的嵌套函数与带属性和方法的 Class 有什么区别? 我在网上看过,问过程序员,但仍然没有弄清楚 class 与包含变量和其他函数的函数有何不同。

示例:

Class

class Add:
    def __init__(self):
        self.a = 5
        self.b = 7
    
    def inside_method(self):
        return (self.a + self.b)

add1 = Add()
print('sum is:', add1.inside_method())

带变量的嵌套函数

def func():
    a = 5
    b = 7
    def nested_func():
        return (a + b)
    return nested_func()
    
print('sum is:', func())

你的问题的评论已经是很好的答案了。

A Python 方法只是一个以 self 作为第一个参数的函数,它是定义 class 的(继承 class 的实例)方法。

确实,对于您的非常简单的示例,使用 class 几乎没有用。但是您可能熟悉 Python 字符串,它们属于 class str :

>>> type("hello")

而一个字符串有 many methods : capitalize, casefold, center, count, encode, endswith , ...

这很方便,因为我不需要每次为每个要调用的方法创建相同的字符串,我可以重复使用相同的实例:

>>> s = "hello"
>>> s.capitalize()
"Hello"
>>> s.replace("h", "G")
'Gello'
>>> s.count("l")
2

更强大的是使用class个实例来存储状态。 Python 字符串是不可变的,但列表不是。

>>> temperatures = [14, 15, 10, 33]
>>> temperatures[1]
15
>>> temperatures[1] = 0
>>> temperatures
[14, 0, 10, 33]
>>> temperatures.sort()
>>> [0, 10, 14, 33]

在 Python 中实现的面向对象主要是将有状态数据与对其进行操作的函数(命名方法)耦合。它旨在简化这些经常有用的结构。

希望它澄清!

在我看来,function是对“action”的抽象,class是对“thing”的抽象。从这个角度看,函数中的成员(局部变量、闭包变量、嵌套函数)都是为了辅助顺利完成一个“动作”。另一方面,class的成员(里面的变量和方法)作为一个“对象”一起工作。当您尝试使用它们时,差异会更加明显。

正如Lenormju所说,它们是不同的范式。选择哪个适合您的需求的目的是关于您希望如何抽象现实世界。在你的例子中,使用嵌套函数进行加法计算更合适。