我有两个文件cointoss和flibbell,python程序。我必须将cointoss导入flibbell,以便flibbell可以继承用户提供的翻转次数。然后,flibbell将在tkinter GUI中激发多个cointosses。 cointoss文件必须有一个main()所以当我试图运行没有if __name__ == "__main__":
的cointoss时,它可以工作但是当我使用CoinToss()运行cointoss文件时,它会给我一个错误{{1} }
当我尝试使用cointoss继承运行flipbell.py时,它给出了一个错误,说它无法识别CoinToss init 变量。
这是cointoss文件:
TypeError: __init__() missing 1 required positional argument: 'flips'
当我单独运行cointoss文件时,这是我应该得到的结果:
from random import randint
import random
class CoinToss:
def __init__(self,flips):
self.state = 1
self.numb = flips
def __str__(self):
firstline = 'The ball at the start : ball: %d, state : %d, value : %d' % (0,0,self.numb)
return firstline
def flip(self):
rand_value = randint(0, 1)
if rand_value == 1:
self +=1
else:
self -=1
return self
def main():
flips = int(input("give the number of flips: "))
dxp = CoinToss(flips)
print(dxp)
k = 0
value_change = flips
for i in range(1,(flips*2) +1):
flips = value_change
value_change = CoinToss.flip(flips)
print('after: ball: %d, state: %d, value: %d' % (i, k , value_change))
k = k+1
if __name__ == "__main__":
main()
这是flipbell文件:
python cointoss.py
Give the number of flips : 6
The ball at the start : ball : 0, state : 0, value : 3
after flip 1, ball : 0, state : 1, value : 2
after flip 2, ball : 0, state : 2, value : 3
after flip 3, ball : 0, state : 3, value : 2
after flip 4, ball : 0, state : 4, value : 3
after flip 5, ball : 0, state : 5, value : 2
after flip 6, ball : 0, state : 6, value : 1
另外,我需要更改位于Class Ball(FlipBell)中的 self.value = CoinToss()中的值:根据CoinToss主,是正确的这样做的方法?
答案 0 :(得分:0)
您的问题在于,由于num_flip
未在全球范围内定义(不应该是这样),因此您的super()
方法无法找到名为{{num_flip
的变量1}}。这个数字需要传递给子类__init__
,然后传递给父类。参见:
class FlipBell(CoinToss):
"""
GUI to simulate billiard ball movement.
"""
def __init__(self, wdw, increment, delay, num_flip):
super(FlipBell,self).__init__(num_flip)
或更常见且通常:
class FlipBell(CoinToss):
"""
GUI to simulate billiard ball movement.
"""
def __init__(self, wdw, increment, delay, *args, **kwargs):
super(FlipBell,self).__init__(*args, **kwargs)