类之外的Python类函数,但它调用了类中定义的函数

时间:2015-09-20 23:08:59

标签: python

在python中,我拥有的内容如下:

def func(self):
  self.func2()


class myClass:
  f = func
  def func2():
    ...

然后我创建一个对象并调用成员函数:

C = myClass
C.f()

这不起作用,它说"myClass object has no attribute 'func2'" ..任何人都可以帮忙调试吗?

编辑: 看到几条建议和意见后,我决定发布原始代码:

def quickSort(self, A, start, end):
    if start < end:
        q = self.partition(A, start, end)
        self.quickSort(A, start, q-1)
        self.quickSort(A, q+1, end)


class SortingAlgo(object):
    qsort = quickSort
    def partition(self, A, start, end):
        x = A[end]
        i = start - 1
        for j in range(start, end):
            if (A[j] <= x):
                i += 1
                A[i], A[j] = A[j], A[i]
        A[i+1], A[end]= A[end], A[i+1]
        return i+1

A = [5, 1, 3, 2, 4, 7 , -4, 9843]
Sort = SortingAlgo()

这是一个简单的快速排序实现,我真的没有意义实现一个,我只是想尝试Python的类功能。上面的代码不起作用,错误信息是:

Traceback (most recent call last):
  File "tmp.py", line 22, in <module>
    Sort.qsort(A, 0, len(A)-1)
  File "tmp.py", line 4, in quickSort
    self.quickSort(A, start, q-1)
AttributeError: 'SortingAlgo' object has no attribute 'quickSort'

我不认为我错过了每个人都提到的任何事情。那么代码有什么问题呢?

2 个答案:

答案 0 :(得分:1)

您正在呼叫self.quickSort(),但课程中没有quickSort。您已将该功能分配给qsort,因此您需要拨打self.qsort()

答案 1 :(得分:0)

添加self作为func2的参数。调用myClass时添加()

def func(self):
  self.func2()

class myClass:
  f = func
  def func2(self):
    print 'func2'

C = myClass()
C.f()