对Python类感到困惑

时间:2015-05-08 08:48:47

标签: python list class sorting natural-sort

我对python中的类如何工作有点困惑。

我想以自然的方式对输入进行排序,并找到了这个解决方案:

def atoi(text):
    return int(text) if text.isdigit() else text

def natural_keys(text):
    '''
    alist.sort(key=natural_keys) sorts in human order
    http://nedbatchelder.com/blog/200712/human_sorting.html
    (See Toothy's implementation in the comments)
    '''
    return [ atoi(c) for c in re.split('(\d+)', text) ]

alist=[
    "something1",
    "something12",
    "something17",
    "something2",
    "something25",
    "something29"]

alist.sort(key=natural_keys)

像魅力一样。

现在我想在我班上加入解决方案。

class __test():

    def atoi(self,text):

        return int(text) if text.isdigit() else text

    def natural_keys(self,text):

        return [ self.atoi(c) for c in re.split('(\d+)', text) ]

b = __test()

alist=[
    "something1",
    "something12",
    "something17",
    "something2",
    "something25",
    "something29"]

alist.sort(key=b.natural_keys(alist))

这不起作用,因为alist被赋予自然键作为列表

这就像一个魅力:

class __test():

    def atoi(self,text):

        return int(text) if text.isdigit() else text

    def natural_keys(self,text):

        return [ self.atoi(c) for c in re.split('(\d+)', text) ]

    def sorta(self,input):

        a = input[::]

        a.sort(key=natural_keys)

        return a


b = __test()

alist=[
    "something1",
    "something12",
    "something17",
    "something2",
    "something25",
    "something29"]

print b.sorta(alist)

我可以理解我必须执行sorta()def,因为所有内容都在类中,而且从外部它是未知的。

但为什么我不能像第一次尝试那样称呼它? 对于natural_keys的输入如何在我的第一次尝试中作为列表而不是在第二次尝试中结束?

另一个问题是为什么我不能这样做:

   def sorta(self,input):

       return input.sort(key=natural_keys)
提前谢谢。 对不起,如果我的措辞似乎令人困惑,但我希望你明白我的意思。

0 个答案:

没有答案