I have the following classes for a game of black jack.
class Player:
def __init__(self, player, balance=0):
self.player = player
self.balance = balance
def __str__(self):
return f'Player: {self.player}\n Balance: ${self.balance}'
def bet(self):
print(self.balance)
class Dealer(Player):
def __init__(self):
pass
I am trying to call the bet method from Player class through the Dealer class but am getting the following error when I print(self.balance).
AttributeError: 'Dealer' object has no attribute 'balance'
I changed this to print(Player.balance) but this does not work either. Can someone please point me in the right direction?
name = input("Enter your full name: ")
balance =int(input("Enter the amount you would like to place on the table? "))
my_player = Player(name, balance)
my_dealer = Dealer()
my_dealer.bet()
2 Answers 2
Python doesn't automatically call __init__ for super classes. You need to call super in your Dealer class
class Dealer(Player):
def __init__(self):
super().__init__(..., ...)
...
In your case, you're not using the Dealer's __init__ so you can remove it completely, in which case it'll inherit its super implementation anyway.
8 Comments
self. How are you updating it?Nice works bro! You just miss a little thing when you inherit a class. At __init__ method, you need to pass a statement: super().__init__(...). In (...), you have to pass all the attributes of the parent class have. After that, you can call the attributes and methods of the parent class.
__init__ofDealeroverridden the__init__ofPlayerclassDealer's__init__()doesn't initialiseself.balance, that attribute doesn't exist. You need to either not provide a__init__()method onDealer(soPlayer's init is used, i.e. you have to provide player and option balance), orDealer's __init__() needs to have parameters which call super().__init__() with those params.