有没有办法将功能/声明指向自身?

时间:2019-10-26 22:42:21

标签: python python-2.7

这并不是真正的问题,更多的是出于好奇。 我是python的新手,并且看到与C ++或Java相比,该语言非常简单,并且具有许多快捷方式。

那么有什么办法可以指向自己吗?让我澄清一下。例如,以下行:

line = line.lower()

是否有一种不用“ line =”部分的方法?有没有一种方法可以让功能/声明自行修改并将其设置为新值?我的灵感来自pycharm中的

自动填充文本
line.lower(self)

我怀疑这是否可能,但是如果有人知道一种方法,那将非常酷。

1 个答案:

答案 0 :(得分:1)

就地操作仅适用于list之类的可变对象。与Java中一样,在Python中,字符串是不可变的类型。 line.lower()操作将产生一个全新的独立字符串对象。如果没有something = ...部分,您将失去对该新对象的引用,并且line会很乐意继续绑定到原始大写字符串。如果您专门重新分配给line而不是其他一些名称,则将该名称重新绑定到新的小写对象。在CPython中,这意味着您将减少原始行的引用计数器,并可能会对其进行垃圾回收。

话虽这么说,但没有什么可以阻止您编写行为符合您要求的类。可以通过维护对字符串的内部引用来使其可变。通过实现正确的dunder方法,您可以模拟str的整个接口。这是一个玩具入门的局部示例:

class MyStr:
    def __init__(self, s):
        self.s = s

    def __add__(self, s):
        return MyStr(self.s + str(s))

    def __iadd__(self, s):
        self.s += str(s)
        return self

    def __str__(self):
        return self.s

    def __repr__(self):
        return '{}({})'.format(type(self).__name__, self.s)

    def lower(self):
        return MyStr(self.s.lower())

    def ilower(self):
        self.s = self.s.lower()

    ...