-5

下面是我的代码。我无法在我的演示类中调用 google_charts 类的函数。帮我解决问题。

class google_charts:
    def all_files_to_one():
        pass

    prods = []
    srcs = []
    sname = []
    def process_compiled():
        global prods, srcs, sname
        sname.append('something')
        prods.append('something')
        srcs.append('something')

def demo():
    google_charts.all_files_to_one()
    google_charts.process_compiled()

demo()

输出:

Traceback (most recent call last):
  File "C:\\demo.py", line 18, in <module>
    demo()
  File "C:\\demo.py", line 15, in demo
    google_charts.all_files_to_one()
TypeError: unbound method all_files_to_one() must be called with google_charts instance as first argument (got nothing instead)
4

4 回答 4

4

在 python 中定义一个类时,其中的任何方法都必须将“self”作为第一个参数:

class cheese(object):
       def some_method(self):
           return None
于 2012-09-01T07:44:18.923 回答
2

您的 google_contacts 类中所有方法的签名都不正确。它们必须包含 self 参数。查看 Python 类的文档:

http://docs.python.org/tutorial/classes.html

这也可能有用:

自我的目的是什么?

于 2012-09-01T07:48:55.317 回答
1

我冒昧地编辑了原始问题,删除了冗长的、不相关的代码,以使实际问题可见。看起来你已经使用了一堆函数,只是在它们周围包裹了一个类。在 Python 类方法中需要一个 self 参数。最初的函数都是样式all_files_to_one,没有可供类操作的状态。一个函数做了(process_compiled)。这是一个更正的版本:

class google_charts(object):  # Python 2.X classes should derive from object

    # Initialize class instance state variables
    def __init__(self):
        self.prods = []  
        self.srcs = []
        self.sname = []

    # methods are called with the class instance object, traditionally named self
    def process_compiled(self):
        # Access instance variables via self
        self.sname.append('something')
        self.prods.append('something')
        self.srcs.append('something')

    # Use a static method when a method does not access class or instance state
    # but logically is associated with the class.  No self parameter is passed
    # for a static method.
    @staticmethod
    def all_files_to_one():
        print 'called all_files_to_one()'

def demo():
    gc = google_charts()  # instantiate an object
    gc.all_files_to_one() # call static method
    gc.process_compiled() # call instance method
    print gc.prods        # see some state in the instance

demo()

输出:

called all_files_to_one()
['something']

请阅读其他海报提到的教程。

于 2012-09-01T15:22:28.797 回答
1

你想使用:

self.all_files_to_one()

除此之外:缺少“self”参数

这个问题是真正基础的 Python 面向对象编程。

请先阅读 Python 教程,而不是玩试错编程。

SO 不能替代阅读基本文档。

于 2012-09-01T07:45:22.247 回答