Non è una risposta diretta alla domanda, ma nei messaggi di seguito c'è una soluzione per quello che Amirouche cercato di fare:
Ed ecco il codice di lavoro esempio (Python 3.2.5).
class Men:
def __init__(self, name):
self.name = name
def who_are_you(self):
print("I'm a men! My name is " + self.name)
def cast_to(self, sex, name):
self.__class__ = sex
self.name = name
def method_unique_to_men(self):
print('I made The Matrix')
class Women:
def __init__(self, name):
self.name = name
def who_are_you(self):
print("I'm a women! My name is " + self.name)
def method_unique_to_women(self):
print('I made Cloud Atlas')
men = Men('Larry')
men.who_are_you()
#>>> I'm a men! My name is Larry
men.method_unique_to_men()
#>>> I made The Matrix
men.cast_to(Women, 'Lana')
men.who_are_you()
#>>> I'm a women! My name is Lana
men.method_unique_to_women()
#>>> I made Cloud Atlas
Annotare il self.__class__
e non self.__class__.__name__
. Cioè questa tecnica non solo sostituisce il nome della classe, ma in realtà converte un'istanza di una classe (almeno entrambi hanno lo stesso id()
). Inoltre, 1) non so se sia "sicuro sostituire un oggetto autonomo con un altro oggetto dello stesso tipo nel metodo [un oggetto proprio]"; 2) funziona con diversi tipi di oggetti, non solo con quelli che sono dello stesso tipo; 3) funziona non esattamente come voleva l'amirouche: non puoi iniziare la lezione come Class(args)
, solo Class()
(non sono un professionista e non posso rispondere perché è così).
Vedi anche: http://stackoverflow.com/questions/1015592/why-is-self-in-python-objects-immutable – ShreevatsaR