2017-12-20 3 views
3

Wenn ich 2 Klassen A und B habe, gibt es eine Möglichkeit, dass ich eine Instanz der Klasse A "springen" kann, um Klasse B und umgekehrt?Wie ändere ich Objektklasse und zugehörige Funktionen?

Ich möchte eine Funktion für Klasse A schreiben, die, wenn sie aufgerufen wird, im Wesentlichen bewirkt, dass die Instanz der Klasse A als Objekt der Klasse B neu initialisiert wird und ihre Ausführung als normale Instanz der Klasse B fortsetzt. Ich möchte eine ähnliche Funktion für Klasse B machen. Ist das möglich?

+0

Sieht aus wie Code-Geruch. Kannst du deine Kurse veröffentlichen und erklären, was du erreichen willst? –

+0

Ich mag es nicht, aber ich kann mir keinen anderen Weg vorstellen. Ich habe die Dateien noch nicht erstellt, aber ich baue ein autonomes Capture the Flaggame. Es gibt zwei Agenten in jeder Mannschaft, eine defensive und eine offensive, und wenn einer stirbt, möchte ich, dass ihre Rollen wechseln. Dies schien wie die Lösung –

+0

Es ist ein Geruch. Eine Rolle ist eine _property_ eines Objekts, das zur Laufzeit zugewiesen werden sollte. Erlaubte Verhaltensweisen für verschiedene Rollen können mit Objektzusammensetzung oder Roll-your-own-Funktionstabellen verwaltet werden. Dies ist wirklich nicht eine gute Verwendung für 'Klasse' IMHO. Aber andere können nicht zustimmen. –

Antwort

2

Überraschenderweise ja.

>>> class C: pass 
... 
>>> c = C() 
>>> type(c) 
<class '__main__.C'> 
>>> c.__class__ 
<class '__main__.C'> 
>>> 
>>> 
>>> class D: pass 
... 
>>> c.__class__ = D 
>>> c.__class__ 
<class '__main__.D'> 
>>> type(c) 
<class '__main__.D'> 

Ich habe Python 3.6.3 dazu verwendet.

Möchten Sie das Springen in Aktion sehen? Schau dir das an:

Python wir lieben dich, uh, ich denke schon .... Das ist seltsam. Aber cool, ja?

Wie wäre es mit einem eigenen Experiment, um zu sehen, wie Sie Attribute aus der ursprünglichen Klasse erhalten können? Es ist ordentlich.

Verwandte Themen