Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中类内调用方法_Python_Oop - Fatal编程技术网

python中类内调用方法

python中类内调用方法,python,oop,Python,Oop,我试图在类中调用方法;该调用是下面的最后一行,self.z() 但是,我得到了这个错误: Traceback (most recent call last): File "./countdown.py", line 6, in <module> class Wait: File "./countdown.py", line 18, in Wait self.z() NameError: name 'self' is not defined 回溯(最近一次呼叫

我试图在类中调用方法;该调用是下面的最后一行,self.z()

但是,我得到了这个错误:

Traceback (most recent call last):
  File "./countdown.py", line 6, in <module>
    class Wait:
  File "./countdown.py", line 18, in Wait
    self.z()
NameError: name 'self' is not defined
回溯(最近一次呼叫最后一次):
文件“/countdown.py”,第6行,在
课堂等待:
文件“/countdown.py”,第18行,正在等待
self.z()
NameError:未定义名称“self”

如何从该类中的另一个方法调用
倒计时

问题是self未在类体中定义self是每个方法的一个参数,但此时您不在任何方法中。我认为您可能试图用100秒倒计时来测试这一点,这意味着您需要主程序中的底层代码:

class Wait:
    def __init__(self,a):
          self.a = a
    def countdown(self,a):
       for remaining in range(self.a, 0, -1):
          sys.stdout.write("\r")
          sys.stdout.write("{0:2d} seconds remaining.".format(remaining))
          sys.stdout.flush()
          time.sleep(1)
       sys.stdout.write("\rWait Complete!            \n")
    def z(self):
       self.countdown(100)

ticker = Wait(10)
ticker.z()
请注意,您的代码忽略从z发送的100值,而使用创建时设置的计时器值。还要注意,我已经更正了格式化的输出语句


你能从这里开始吗?

问题是,自我没有在班级中定义self是每个方法的一个参数,但此时您不在任何方法中。我认为您可能试图用100秒倒计时来测试这一点,这意味着您需要主程序中的底层代码:

class Wait:
    def __init__(self,a):
          self.a = a
    def countdown(self,a):
       for remaining in range(self.a, 0, -1):
          sys.stdout.write("\r")
          sys.stdout.write("{0:2d} seconds remaining.".format(remaining))
          sys.stdout.flush()
          time.sleep(1)
       sys.stdout.write("\rWait Complete!            \n")
    def z(self):
       self.countdown(100)

ticker = Wait(10)
ticker.z()
请注意,您的代码忽略从z发送的100值,而使用创建时设置的计时器值。还要注意,我已经更正了格式化的输出语句


你能从这里开始吗?

你想在对象创建后立即启动
self.z()
self.z()
,它只在类的实例方法中起作用。你想要达到什么?这真的需要成为一门课吗?将
倒计时
作为一个独立函数有什么不对?在类已经存在的地方已经有了一堆代码,比如说类ABC。这个类中的其他方法ABC目前使用time.sleep,我有时不得不等待100秒。我不想使用time.sleep,而是想使用这个类中的其他方法可以使用的方法countdown。我不想为倒计时创建单独的类。总而言之,我如何在类中为其他方法使用方法倒计时?您可以调用
self.countdown(一些数字)
,就像您所做的那样。您的代码中的
倒计时
没有问题;问题是你在一个不允许你调用的地方调用
z()
。大概在您的真实代码中,这不会是一个问题。您是否希望在创建对象时立即启动
self.z()
self.z()
,它只在类的实例方法中起作用。你想要达到什么?这真的需要成为一门课吗?将
倒计时
作为一个独立函数有什么不对?在类已经存在的地方已经有了一堆代码,比如说类ABC。这个类中的其他方法ABC目前使用time.sleep,我有时不得不等待100秒。我不想使用time.sleep,而是想使用这个类中的其他方法可以使用的方法countdown。我不想为倒计时创建单独的类。总而言之,我如何在类中为其他方法使用方法倒计时?您可以调用
self.countdown(一些数字)
,就像您所做的那样。您的代码中的
倒计时
没有问题;问题是你在一个不允许你调用的地方调用
z()
。大概在您的真实代码中,这不会是一个问题。这不完全是我想要的。如前所述,我只是不想使用另一个类进行倒计时/等待。我想在同一个类中使用倒计时方法,我现在说的是ABC类,这样我就可以在ABC类的其他方法中使用它。比方说,def z想要执行cli“abcd”,并想等待100秒。然后请澄清您的问题,可能显示尝试使用ABC类失败。你的帖子给出了等待中的所有方法,我的回答保留了这一点。您的错误在于将活动代码放置在类的主体中,以及尝试使用未在该级别定义的变量。另外,请注意,我确实回答了您的问题:您的倒计时方法确实可以从类中调用。您对z的调用是非法的,但是让z调用倒计时已经是正确的。我很抱歉,我不清楚。比方说,我有一组与上面提到的相同的代码,相反,类的名称是class ABC。现在,我有两种方法,倒计时和z。倒计时代码不变。方法z的代码如下:def z(self):print(“在执行cli之前”)self。倒计时(100)print(“正在执行cli abcd”)这是怎么回事?这里所做的只是更改类的名称,并向z添加两个print语句。这并不影响我给出的答案:z可以很容易地调用倒计时,ABC的任何对象都可以调用它的z方法。这不是我想要的。如前所述,我只是不想使用另一个类进行倒计时/等待。我想在同一个类中使用倒计时方法,我现在说的是ABC类,这样我就可以在ABC类的其他方法中使用它。比方说,def z想要执行cli“abcd”,并想等待100秒。然后请澄清您的问题,可能显示尝试使用ABC类失败。你的帖子给出了等待中的所有方法,我的回答保留了这一点。您的错误在于将活动代码放置在类的主体中,以及尝试使用未在该级别定义的变量。另外,请注意,我确实回答了您的问题:您的倒计时方法确实可以从类中调用。您对z的调用是非法的,但是让z调用倒计时已经是正确的。我很抱歉,我不清楚。比如说,我有