0
class Tank(object):

    def _init_(self,name):

        self.name =  name
        self.alive = True
        self.ammo = 5
        self.armor = 60

    def _str_(self):

        if self.alive:
            return "%s (%i armor and %i shells left)"%(self.name,self.armor,self.ammo)
        else:
            return "%s is DEAD !" % self.name

    def fire_at(self,enemy):

        if self.ammo >= 1:
            self.ammo-=1
            print(self.name," fires on ",enemy.name)
            enemy.hit()
        else:
            print(self.name," has no shells!")

        def hit(Self):

            self.armor-=20
            print(self.name," is hit !")
            if self.armor<=0:
                self.explode()

        def explode(self):

            self.alive = False
            print(self.name," explodes !!!!")

from tank import Tank

tanks = {"a":Tank("Alice"), "b":Tank("Bob"), "c":Tank("Crane") }
alive_tanks = len(tanks)

while alive_tanks > 1:
    print()
    for tank_name in sorted(tanks):
        print(tank_name,tanks[tank_name])

    first = raw_input("Who fires ?").lower()
    second = raw_input("Who at ?").lower()

    try:
        first_tank = tanks[first]
        second_tank = tanks[second]
    except KeyError:
        print("No such Tank ")
        continue

    if not first_tank.alive or not second_tank.alive:
        print("One of those is dead!")
        continue

    print()
    print("*"*30)

    first_tank.fire_at(second_tank)
    if not second_tank.alive:
        alive_tanks -= 1

    print("*"*30)

    for tank in tanks.value():
        if tank.alive:
            print(tank.name," is the winner !")
            break

On running it gives error :

tanks = {"a":Tank("Alice"), "b":Tank("Bob"), "c":Tank("Crane") }
TypeError: object() takes no parameters

What I need to resolve it?

1 Answer 1

1

class init methods are ddunder methods, you need to declare the init method with two underscores before and after, if not the the default init method is called.

__init__(self, name)

instead of

_init_(self, name)

Same goes for your str method, it needs to be:

__str__
Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.