我有一个类(dicts 列表),我希望它自己排序:
class Table(list):
…
def sort (self, in_col_name):
self = Table(sorted(self, key=lambda x: x[in_col_name]))
Run Code Online (Sandbox Code Playgroud)
但它根本不起作用.为什么?怎么避免呢?除了在外部进行排序外,例如:
new_table = Table(sorted(old_table, key=lambda x: x['col_name'])
Run Code Online (Sandbox Code Playgroud)
是不是可以操纵对象本身?拥有以下内容更有意义:
class Table(list):
pass
Run Code Online (Sandbox Code Playgroud)
比:
class Table(object):
l = []
…
def sort (self, in_col_name):
self.l = sorted(self.l, key=lambda x: x[in_col_name])
Run Code Online (Sandbox Code Playgroud)
我认为,这是有效的.一般来说,Python中没有任何方法可以改变对象(不仅仅是实例变量)?
Tho*_*zco 16
您无法self从方法中重新分配,并期望它更改对该对象的外部引用.
self只是一个传递给你的函数的参数.它是一个名称,指向调用该方法的实例."分配给self"等同于:
def fn(a):
a = 2
a = 1
fn(a)
# a is still equal to 1
Run Code Online (Sandbox Code Playgroud)
分配到self的变化是什么self 名称指向(从一个Table实例到一个新的Table位置实例).但就是这样.它只是更改名称(在方法的范围内),并且不会影响基础对象,也不会影响指向它的其他名称(引用).
只需使用list.sort以下方式排序:
def sort(self, in_col_name):
super(Table, self).sort(key=lambda x: x[in_col_name])
Run Code Online (Sandbox Code Playgroud)