python – 为什么分配给自己不起作用,以及如何解决这个问题?

我有一个类(dicts列表),我希望它自己排序:

class Table(list):
…
  def sort (self, in_col_name):
    self = Table(sorted(self, key=lambda x: x[in_col_name]))

但它根本不起作用.为什么?怎么避免呢?除了在外部进行排序外,例如:

new_table = Table(sorted(old_table, key=lambda x: x['col_name'])

是不是可以操纵对象本身?拥有以下内容更有意义:

class Table(list):
  pass

比:

class Table(object):
  l = []
  …
  def sort (self, in_col_name):
    self.l = sorted(self.l, key=lambda x: x[in_col_name])

我认为,这是有效的.
一般来说,Python中没有任何方法可以改变对象(不仅仅是实例变量)?

最佳答案
您无法从方法中重新分配给self,并期望它更改对象的外部引用.

self只是传递给你的函数的参数.它是一个名称,指向调用该方法的实例. “分配给自己”相当于:

def fn(a):
   a = 2
a = 1
fn(a)
# a is still equal to 1

分配给self会更改自我指向的内容(从一个Table实例到此处的新Table实例).但就是这样.它只是更改名称(在方法的范围内),并且不会影响基础对象,也不会影响指向它的其他名称(引用).

只需使用list.sort进行排序:

def sort(self, in_col_name):
    super(Table, self).sort(key=lambda x: x[in_col_name])

转载注明原文:python – 为什么分配给自己不起作用,以及如何解决这个问题? - 代码日志