参数'没有值;自我';在Python中调用方法时
我在stackoverflow内外做了很多研究。是的,也有类似的话题。但是我找不到我具体问题的答案。也许是因为我目前对Python的理解还看不到更大的图景 在最后一行中,我得到错误“在方法调用中参数'self'没有值”。我必须如何在这里正确调用该方法?或者根本不可能在同一个类中调用方法参数'没有值;自我';在Python中调用方法时,python,methods,self,method-call,Python,Methods,Self,Method Call,我在stackoverflow内外做了很多研究。是的,也有类似的话题。但是我找不到我具体问题的答案。也许是因为我目前对Python的理解还看不到更大的图景 在最后一行中,我得到错误“在方法调用中参数'self'没有值”。我必须如何在这里正确调用该方法?或者根本不可能在同一个类中调用方法 class Main: metronomeState = True currentMillis = 0 lastMillis = 0 intervalMillis = 0
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
。最后一行必须在类定义之外(我怀疑它在您的真实代码中,因为无论哪种方式,将它放在类中都是不合法的)。如果您的类只有一个方法(可以是类方法),那么它可以是一个接受大量参数的常规函数(大多数参数都有默认值)。