Si j'ai deux classes, et que l'une d'entre elles a une fonction que je veux utiliser dans mon autre classe, qu'est-ce que j'utilise pour ne pas avoir à réécrire ma fonction?Python utilisant des méthodes d'autres classes
20
A
Répondre
25
Il y a deux options:
- instancie un objet dans votre classe, puis appelez la méthode souhaitée sur ce
- utilisation @classmethod pour transformer une fonction dans une méthode de classe
Exemple:
class A(object):
def a1(self):
""" This is an instance method. """
print "Hello from an instance of A"
@classmethod
def a2(cls):
""" This a classmethod. """
print "Hello from class A"
class B(object):
def b1(self):
print A().a1() # => prints 'Hello from an instance of A'
print A.a2() # => 'Hello from class A'
Ou utiliser l'héritage, le cas échéant:
class A(object):
def a1(self):
print "Hello from Superclass"
class B(A):
pass
B().a1() # => prints 'Hello from Superclass'
6
Vous créez une classe à partir de laquelle les deux classes héritent.
Il existe plusieurs héritages, donc s'ils ont déjà un parent, ce n'est pas un problème.
class master():
def stuff (self):
pass
class first (master):
pass
class second (master):
pass
ichi=first()
ni=second()
ichi.stuff()
ni.stuff()
21
Il existe plusieurs approches:
- héritage
- Délégation
- délégation Super-sournoise
Les exemples suivants utilisent chaque pour partager une fonction qui imprime un membre.
héritage
class Common(object):
def __init__(self,x):
self.x = x
def sharedMethod(self):
print self.x
class Alpha(Common):
def __init__(self):
Common.__init__(self,"Alpha")
class Bravo(Common):
def __init__(self):
Common.__init__(self,"Bravo")
Délégation
class Common(object):
def __init__(self,x):
self.x = x
def sharedMethod(self):
print self.x
class Alpha(object):
def __init__(self):
self.common = Common("Alpha")
def sharedMethod(self):
self.common.sharedMethod()
class Bravo(object):
def __init__(self):
self.common = Common("Bravo")
def sharedMethod(self):
self.common.sharedMethod()
Super-sournoise Délégation
Cette solution est basé sur le fait qu'il n'y a rien de spécial à propos de membre Python les fonctions; vous pouvez utiliser n'importe quelle fonction ou objet appelable tant que le premier paramètre est interprété comme l'instance de la classe.
def commonPrint(self):
print self.x
class Alpha(object):
def __init__(self):
self.x = "Alpha"
sharedMethod = commonPrint
class Bravo(object):
def __init__(self):
self.x = "Bravo"
sharedMethod = commonPrint
Ou, de manière tout aussi sournoise de la délégation réalisation est d'utiliser un objet appelable:
class Printable(object):
def __init__(self,x):
self.x = x
def __call__(self):
print self.x
class Alpha(object):
def __init__(self):
self.sharedMethod = Printable("Alpha")
class Bravo(object):
def __init__(self):
self.sharedMethod = Printable("Bravo")
Questions connexes
- 1. Utiliser des décorateurs python sur les méthodes de classe et les méthodes de sous-classes
- 2. Injecter des méthodes dans des classes existantes
- 3. Méthodes d'auto-enregistrement de classes utilisant le décorateur
- 4. Appel des méthodes @selector entre les classes
- 5. Liste des classes/méthodes obsolètes dans msbuild
- 6. Java classes et méthodes Question
- 7. méthodes python tests qui font appel des méthodes de classe
- 8. Implémenter des classes en python
- 9. Importer des classes en python
- 10. Organisation des assistants, des méthodes et des classes
- 11. Appelez les modules python des classes java?
- 12. Méthodes abstraites en Python
- 13. extension des classes de base en Python
- 14. Comment gérer des classes avec des méthodes statiques avec Ninject?
- 15. classes anonymes internes Méthodes intérieur
- 16. Code utilisant des classes et des interfaces
- 17. Classes de refactoring utilisant des variables globales
- 18. Importer des classes C++ en python?
- 19. descripteurs python partageant des valeurs entre classes
- 20. Importer et structurer des modules/classes python
- 21. Créer des classes équivalentes en Python?
- 22. Comment lister toutes les classes WMI ayant des méthodes utilisant VBScript?
- 23. Interface IDescription utilisant des génériques et des méthodes d'extension
- 24. méthodes personnalisées en python urllib2
- 25. décorateurs et méthodes python
- 26. C++: les classes dérivées et des méthodes virtuelles
- 27. Carte des dépendances pour les classes et méthodes Java
- 28. test unitaire des classes complexes avec de nombreuses méthodes privées
- 29. Comment copier des méthodes singleton entre différentes classes Ruby?
- 30. Interrogation des attributs sur les classes/méthodes en C#
à mon humble avis horrible et illisible. –
Il n'y a pas d'héritage multiple ici. C'est un héritage unique, bien qu'il soit possible que vous pensiez à l'héritage hiérarchique. – Nikwin
@Nikwin, +1 comme je voulais juste le dire. –