自我是必需的

2024-10-04 09:20:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我在和kivy一起研究python2.7。据我所知,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)

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

^{pr2}$

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

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)

Tags: self参数datetimedefcallbackdtnowsplit
2条回答

你应该这样做:

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(object ref)作为第一个参数,但对象当时没有创建。在

你应该打电话给:

 self.start()

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

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

^{pr2}$

或者,您可以从内部调用Verdo的代码。在这种情况下,您需要指定正在当前实例上操作。在

相关问题 更多 >