Pieter Macron
Pieter Macron

Reputation: 1

Python TypeError object() takes no parameters while class

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?

Upvotes: 0

Views: 49

Answers (1)

Treizh
Treizh

Reputation: 322

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__

Upvotes: 1

Related Questions