需要自我作为参数
Self is required as an argument
我正在 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)
您应该打电话给:
self.start()
self
是一个真正的参数,但它作为调用该方法的对象自动提供。
您可能希望在两种不同的上下文中调用 .start()
。第一个是在实例化 Verdo 类型的对象之后:
my_verdo = Verdo()
my_verdo.start()
或者,您可以从内部 调用 Verdo 的代码。在这种情况下,您需要指定您在当前实例上运行。
你应该这样做:
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 脚本进行快速测试。
您的错误是您试图在 class 代码中调用 class 方法而不调用构造函数。在这种情况下,方法 class 确实在等待 self (object ref) 作为第一个参数,但当时还没有创建对象。
我正在 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)
您应该打电话给:
self.start()
self
是一个真正的参数,但它作为调用该方法的对象自动提供。
您可能希望在两种不同的上下文中调用 .start()
。第一个是在实例化 Verdo 类型的对象之后:
my_verdo = Verdo()
my_verdo.start()
或者,您可以从内部 调用 Verdo 的代码。在这种情况下,您需要指定您在当前实例上运行。
你应该这样做:
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 脚本进行快速测试。 您的错误是您试图在 class 代码中调用 class 方法而不调用构造函数。在这种情况下,方法 class 确实在等待 self (object ref) 作为第一个参数,但当时还没有创建对象。