Est-ce que les méthodes-classes python ont elles-mêmes une méthode/membre, qui indique la classe à laquelle elles appartiennent?Python: Récupère la classe à laquelle appartient une méthode
Par exemple ...:
# a simple global function dummy WITHOUT any class membership
def global_function():
print('global_function')
# a simple method dummy WITH a membership in a class
class Clazz:
def method():
print('Clazz.method')
global_function() # prints "global_function"
Clazz.method() # prints "Clazz.method"
# until here, everything should be clear
# define a simple replacement
def xxx():
print('xxx')
# replaces a certain function OR method with the xxx-function above
def replace_with_xxx(func, clazz = None):
if clazz:
setattr(clazz, func.__name__, xxx)
else:
func.__globals__[func.__name__] = xxx
# make all methods/functions print "xxx"
replace_with_xxx(global_function)
replace_with_xxx(Clazz.method, Clazz)
# works great:
global_function() # prints "xxx"
Clazz.method() # prints "xxx"
# OK, everything fine!
# But I would like to write something like:
replace_with_xxx(Clazz.method)
# instead of
replace_with_xxx(Clazz.method, Clazz)
# note: no second parameter Clazz!
Maintenant, ma question est la suivante: Comment est-il possible, d'obtenir toutes les méthodes/appels de fonction print "xxx", SANS l'argument "clazz = Aucun" dans le replace_with_xxx fonction???
Y at-il quelque chose comme possible:
def replace_with_xxx(func): # before it was: (func, clazz = None)
if func.has_class(): # something possible like this???
setattr(func.get_class(), func.__name__, xxx) # and this ???
else:
func.__globals__[func.__name__] = xxx
Merci beaucoup pour la lecture. J'espère, je pourrais faire un peu clair, ce que je veux. Bonne journée! :)
Quelle idée terrible. Pourquoi essayez-vous de modifier la structure d'une classe? Pourquoi ne pas définir une nouvelle classe? Pourquoi ne pas utiliser un modèle de conception plus simple comme ** Stratégie **? –
Quel est le problème que vous essayez de résoudre? –