Skip to content
Advertisement

Instance error in OOP design: Instance of Card has No points member

I’m reading this book called Master Object Oriented programming Python by Steven Lott.

I came across this code:

class Card:
    def  __init__( self, rank, suit ):
        self.suit= suit
        self.rank= rank
        self.hard, self.soft = self._points()
class NumberCard( Card ):
    def _points( self ):
        return int(self.rank), int(self.rank)
class AceCard( Card ):
    def _points( self ):
        return 1, 11
class FaceCard( Card ):
    def _points( self ):
        return 10, 10

I’m not able to understand how can self._points() in Card be legal expression.

I run the code in compiler too it stats the following error Instance of Card has No points member

Error Image Full Code I have kept it as gist here

Advertisement

Answer

From your error: it is just a pylint issue, if you do not do something like c = Card(1, 2), it will be ok.

The code in fact is correct.

It intends you will call it like n = NumberCard(1, 2), then __init__ will be used by its subclass, and subclass has the function _points.

In fact, for other language, usually we need to define a _points function in parent class. Then, subclass could override the function in parent class. But python is not so strict, so you could do without define _points function in parent class, but then you will just able to new a object for its subclass not parent class.

To sum all, what you need to google is function override of OOP.

User contributions licensed under: CC BY-SA
3 People found this is helpful
Advertisement