Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/45.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_Methods_Self_Method Call - Fatal编程技术网

参数'没有值;自我';在Python中调用方法时

参数'没有值;自我';在Python中调用方法时,python,methods,self,method-call,Python,Methods,Self,Method Call,我在stackoverflow内外做了很多研究。是的,也有类似的话题。但是我找不到我具体问题的答案。也许是因为我目前对Python的理解还看不到更大的图景 在最后一行中,我得到错误“在方法调用中参数'self'没有值”。我必须如何在这里正确调用该方法?或者根本不可能在同一个类中调用方法 class Main: metronomeState = True currentMillis = 0 lastMillis = 0 intervalMillis = 0

我在stackoverflow内外做了很多研究。是的,也有类似的话题。但是我找不到我具体问题的答案。也许是因为我目前对Python的理解还看不到更大的图景

在最后一行中,我得到错误“在方法调用中参数'self'没有值”。我必须如何在这里正确调用该方法?或者根本不可能在同一个类中调用方法

class Main:
    metronomeState = True
    currentMillis = 0
    lastMillis = 0
    intervalMillis = 0
    bpm = 120
    measureCount = 0

    def bpmToMilliInterval(self):
            self.bps = Main.bpm/60
            return int((1/self.bps)*1000)

    Main.intervalMillis = Main.bpmToMilliInterval()
似乎没有理由使用这个类,因为我不需要实例化它。但是我想在另一个类Gui()中使用Main()的代码,该类负责所有Gui内容。所以不同的类是我组织代码的一种方式。 好办法还是不好


提前感谢您的帮助

这里的问题是,您编写的类没有init函数,并且您的类没有自变量

例如:

class Person:

  def __init__(self):
    health = 100
    name = "Harry"


  def changeName(self,newName):

    self.name = newName

只有在有init函数时才起作用。像self.name这样的自变量的原因是,以后可以编辑这些值,就像您尝试使用Main.bps一样。如果在init函数中有self.bps,则可以稍后在函数中编辑它,前提是您也在函数中写入self.bps。我不确定在类中单独使用bpm之类的东西而不是self.bps,因为我确定bps在主忽略函数的范围内是私有的。另外,请务必检查您的缩进!:)

谢谢你的评论!我想出了一些可行的办法。我希望这也有道理。我修正了我的凹痕

import winsound
import time

class MetronomeCalc:
    def __init__(self):
        self.metronomeState = True
        self.currentMillis = 0
        self.lastMillis = 0
        self.intervalMillis = 0
        self.bpm = 120
        self.bps = 0
        self.bpms = 0
        self.measureCount = 0

    def getBpm(self):
        bpm = 120
        return bpm

    def bpmToMilliInterval(self):
        self.bps = self.bpm/60
        self.intervalMillis = int((1/self.bps)*1000)

    def playMetronome(self):
        self.bpmToMilliInterval()
        while self.measureCount < 8:
            if self.currentMillis - self.lastMillis >= self.intervalMillis:
                self.lastMillis = int(round(time.time()*1000))
                winsound.Beep(1000, 100)
                self.measureCount = self.measureCount + 1
            else:
                self.currentMillis = int(round(time.time()*1000))
导入winsound
导入时间
节拍器等级:
定义初始化(自):
self.metronomeState=True
self.currentMillis=0
self.lastMillis=0
self.intervalMillis=0
self.bpm=120
self.bps=0
self.bpms=0
self.measureCount=0
def getBpm(自我):
bpm=120
返回bpm
def BPMTOMILLIVAL间隔(自):
self.bps=self.bpm/60
self.intervalMillis=int((1/self.bps)*1000)
def播放节拍器(自身):
self.bpmtomillinterval()
当self.measureCount<8时:
如果self.currentMillis-self.lastMillis>=self.intervalMillis:
self.lastMillis=int(四舍五入(time.time()*1000))
winsound.Beep(1000100)
self.measureCount=self.measureCount+1
其他:
self.currentMillis=int(四舍五入(time.time()*1000))

缩进是否正确?另外,您正在类上调用一个假定的实例方法。是否要在类定义过程中设置类属性?类的唯一实例属性是
bps
,并且未在
\uuuuu init\uuuu
中建立该属性;所有其他属性都是类属性。是否可以创建
Main
的实例?如果不是,这是一个非常奇怪的类,但是您可能只想将
bpmToMilliInterval
作为
@classmethod
(假设
bps
需要在调用之外保留)并(仅为了适当的样式)将所有对
self
的引用更改为
cls
。最后一行必须在类定义之外(我怀疑它在您的真实代码中,因为无论哪种方式,将它放在类中都是不合法的)。如果您的类只有一个方法(可以是类方法),那么它可以是一个接受大量参数的常规函数(大多数参数都有默认值)。