需要自我作为参数
问题描述:
我正在使用python2.7上的kivy。据我所知,在处理父数据时,self并不是一个真正的参数,而是一个在函数中使用的工具。然而在下面的使用中,python认为自己是一个真实的论点。这是因为我在函数中调用它?需要自我作为参数
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)
答
你应该做这样的事情:
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)作为第一个参数,但该对象并没有在那个时候创建。
+0
感谢您的帮助。 – Zalanas
答
你应该打电话:
self.start()
self
是一个真正的参数,但它是作为在其上调用该方法的对象自动地供给。
有两种不同的上下文可能需要拨打.start()
。首先是实例化类型Verdo的目的后:
my_verdo = Verdo()
my_verdo.start()
或者,也可以从调用内部为 Verdo的代码。在这种情况下,你需要指定你正在使用当前的实例。
您的缩进是正确的吗?在你的例子中,你正在调用没有对象的start()(例如'x.start()')。 – AlG
我遇到的问题是类由kivy主循环调用,这就是为什么我试图让该函数在类中运行。 – Zalanas