如何导入不同类的参数

时间:2016-02-04 17:22:52

标签: python class python-3.x

我有两个文件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主,是正确的这样做的方法?

1 个答案:

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