Ich kodiere die Dynamik eines Spiels. Es gibt zwei Arten von Sperren im Spiel, Blöcke und Bälle, die geschoben werden können. Ich möchte, dass Bälle rollen, wenn sie geschoben werden.So lassen Sie Subclass-Methoden der Super-Klasse in Python
Also schrieb ich den folgenden Code:
class Barrier:
def __move(self):
print 'Moving'
def push(self):
if self.canMove():
self.__move()
else:
pass # Push barriers in front of it
def canMove(self):
return True
class Ball(Barrier):
def __move(self):
self.__startRolling()
super(Ball, self).__move()
def __startRolling(self):
print 'Started rolling'
class Block(Barrier):
# bla bla bla
pass
Wenn push()
genannt wird, Klasse Barrier
prüft, ob es (andere Hindernisse vor ihm es eine Bewegung verhindern kann) bewegen kann, und dann self.__move()
nennen. Für die Klasse Ball
überschreibt sie diese Methode und beginnt mit dem Rollen, bevor sie verschoben wird.
Es gibt zwei Probleme. Erstens, wenn ich lief den folgenden Code:
ball = Ball()
ball.push()
Ich habe gerade Moving
auf dem Bildschirm, aber keine Started rolling
. lief
Zweitens, wenn ich:
ball = Ball()
ball._Ball__move()
Ich habe:
Traceback (most recent call last):
File "F:\project\test.py", line 25, in <module>
ball._Ball__move()
File "F:\project\test.py", line 15, in __move
super(Ball, self).__move()
TypeError: must be type, not classobj
Wie mein Ziel verwirklichen kann?
Ich löste das erste Problem, indem ich 'def __move' in' defmove' in der Klasse 'Ball' änderte. Aber ich weiß immer noch nicht, wie ich das zweite Problem lösen soll, und ich muss die 'move'-Funktion in der Klasse' Barrier' anders benennen (z. B. '_Barrier__move'), um sie aufzurufen. Auf diese Weise muss ich auch die "move" -Funktion in der Klasse "Block" implementieren, aber ich möchte, dass sie nur die "move" -Funktion von der Klasse "Barrier" erbt. – LouYu