在Python中调用方法时,参数“self”没有值

2024-09-27 21:29:57 发布

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

我在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内容。所以不同的类是我组织代码的一种方式。 好办法还是不好

提前感谢您的帮助


Tags: 方法答案代码self参数main错误gui
2条回答

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

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))

这里的问题是,您编写的类没有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在主忽略函数的范围内是私有的。另外,请务必检查您的缩进!:)

相关问题 更多 >

    热门问题