需要自我作为论据

时间:2015-04-07 19:14:08

标签: python kivy

我在python2.7上使用kivy。据我所知,在处理父数据时,self不是一个真正的参数,而是一个在函数中使用的工具。然而在下面的使用中,python认为self是一个真实的论点。这是因为我在函数中调用它吗?

class Verdo(BoxLayout):
    defualtval = ""
    tarih = StringProperty(str(datetime.datetime.now()).split(".")[0])
    istipitxt = StringProperty(defualtval)
    iscitxt = StringProperty(defualtval)
    iskodtxt = StringProperty(defualtval)
    baslabittxt = StringProperty(defualtval)
    parcanotxt = StringProperty(defualtval)



    def start(self):
        Clock.schedule_interval(self.callback, 0.5)

    def callback(self, dt):
        print "testo"
        self.tarih = StringProperty(str(datetime.datetime.now()).split(".")[0])

    start()   
    #Clock.schedule_interval((lambda dt: updater(), 1), 0.5)   
    #Clock.schedule_interval((lambda dt: tell(), 1), 0.5)

运行代码时,会发生以下错误:

2015-04-07 22:05:03.081739
 Traceback (most recent call last):
   File "/home/toshy/workspace/Verdo_reborn/main.py", line 28, in <module>
     class Verdo(BoxLayout):
   File "/home/toshy/workspace/Verdo_reborn/main.py", line 79, in Verdo
     start()   
 TypeError: start() takes exactly 1 argument (0 given)

我还尝试了一种更简单的方法,但也失败了:

def callback(self, dt):
    print "testo"
    self.tarih = StringProperty(str(datetime.datetime.now()).split(".")[0])

Clock.schedule_interval(callback, 0.5)

输出:

     ret = callback(self._dt)
 TypeError: callback() takes exactly 2 arguments (1 given)

2 个答案:

答案 0 :(得分:2)

你应该打电话:

 self.start()

self 是一个真正的参数,但它自动作为调用该方法的对象提供。

您可能希望调用.start()两种不同的上下文。第一个是在实例化Verdo类型的对象之后:

 my_verdo = Verdo()
 my_verdo.start()

或者,您可能正在使用里面的来调用Verdo的代码。在这种情况下,您需要指定您在当前实例上运行。

答案 1 :(得分:1)

你应该这样做:

class Verdo(BoxLayout):
    defualtval = ""
    tarih = StringProperty(str(datetime.datetime.now()).split(".")[0])
    istipitxt = StringProperty(defualtval)
    iscitxt = StringProperty(defualtval)
    iskodtxt = StringProperty(defualtval)
    baslabittxt = StringProperty(defualtval)
    parcanotxt = StringProperty(defualtval)



    def start(self):
        Clock.schedule_interval(self.callback, 0.5)

    def callback(self, dt):
        print "testo"
        self.tarih = StringProperty(str(datetime.datetime.now()).split(".")[0])    

if __name__ == '__main__':
    verdoInstance = Verdo()
    verdoInstance.start()

这只是一个示例,如果您希望将代码快速测试为单个可执行的python脚本。 您的错误是您试图调用您的类方法而不在类代码中调用构造函数。在这种情况下,方法类实际上是在等待self(对象引用)作为第一个参数,但是当时没有创建对象。