Python 为什么在_init__方法中不触发此函数?

Python 为什么在_init__方法中不触发此函数?,python,Python,为什么lower()不在代码中对val的内容进行操作?您的意思可能是: class test: def __init__(self, val): self.val = val self.val.lower() 或者,更简洁地说: self.val = self.val.lower() 更详细地说,不在适当的位置修改字符串(它不能,因为字符串是不可变的)。相反,它返回一个经过适当修改的字符串副本。非常清楚地说明: 返回字符串的副本,其中所有大小写字符[4

为什么lower()不在代码中对val的内容进行操作?

您的意思可能是:

class test:
    def __init__(self, val):
        self.val = val
        self.val.lower()
或者,更简洁地说:

self.val = self.val.lower()
更详细地说,不在适当的位置修改字符串(它不能,因为字符串是不可变的)。相反,它返回一个经过适当修改的字符串副本。

非常清楚地说明:

返回字符串的副本,其中所有大小写字符[4]都转换为小写


在Python中,有两种类型的函数会导致这种混淆。例如,要对列表进行排序,可以执行以下操作:

class test:
    def __init__(self, val):
        self.val = val.lower()


第一个对“a”进行排序,但第二个对“a”进行排序并返回新的排序列表

这是因为字符串是不可变的。您不能在适当的位置更改它们

因此,必须覆盖变量的值,如下所示:

>>> a = sorted(a)
注意:当然,除非您的
self.val
不是字符串,而是在调用
lower()
方法后发生更改的某个可变对象。但事实并非如此(不过,如果您创建了
self.val
类,则可以这样做)

使用
lower()
方法就地更改可变对象的示例:

self.val = self.val.lower()

它有用吗?

实际上有用,但您不存储结果。看看aix写了什么,记住字符串在Python中是不可变的。没有任何东西可以更改字符串对象--您只能获得修改后的副本。然后告诉我应该使用什么函数在
self.val
中降低字符串,而不是返回它。
self.val = self.val.lower()
>>> class LowerableList(list):
    def lower(self):
        for i, item in enumerate(self):
            self[i] = item.lower()

>>> a = LowerableList(['A', 'a', 'X', 'D'])
>>> a
['A', 'a', 'X', 'D']
>>> a.lower()
>>> a
['a', 'a', 'x', 'd']