Wenn ich zwei Klassen habe, und eine von ihnen hat eine Funktion, die ich in meiner anderen Klasse verwenden möchte, was verwende ich, damit ich meine Funktion nicht umschreiben muss?Python mit Methoden aus anderen Klassen
20
A
Antwort
25
Es gibt zwei Möglichkeiten:
- Instanciate ein Objekt in Ihrer Klasse, rufen Sie dann die gewünschte Methode auf sie
- Verwendung @classmethod eine Funktion in einer Klassenmethode drehen
Beispiel:
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'
oder Vererbung falls:
class A(object):
def a1(self):
print "Hello from Superclass"
class B(A):
pass
B().a1() # => prints 'Hello from Superclass'
6
Sie erstellen eine Klasse, von der beide Klassen erben.
Es gibt mehrere Vererbung, also wenn sie bereits ein Elternteil haben, ist es kein Problem.
class master():
def stuff (self):
pass
class first (master):
pass
class second (master):
pass
ichi=first()
ni=second()
ichi.stuff()
ni.stuff()
21
Es gibt mehrere Ansätze:
- Inheritance
- Delegation
- Super hinterhältig Delegation
Die folgenden Beispiele verwenden jeweils zum Teilen einer Funktion, die ein Mitglied druckt.
Inheritance
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")
Delegation
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 hinterhältig Delegation
Diese Lösung basiert auf der Tatsache ab, dass es nichts besondere über Python Mitglied Funktionen; Sie können jede Funktion oder jedes aufrufbare Objekt verwenden, solange der erste Parameter als Instanz der Klasse interpretiert wird.
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
Oder eine ähnlich hinterhältige Art und Weise Delegation zu erreichen, ist ein aufrufbare Objekt zu verwenden:
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")
Verwandte Themen
- 1. Python öffentliche Methoden in Klassen?
- 2. Wie eine andere Klassen Methoden aus einer anderen Klasse aufrufen?
- 3. Zu welchen Klassen gehören Python-Intrinsic-Methoden?
- 4. Methoden zwischen Klassen aufrufen
- 5. Modul mit Klassen mit nur statischen Methoden
- 6. Call Delegate Methoden aus einer anderen Klasse
- 7. Mock statische Methoden aus mehreren Klassen mit PowerMock
- 8. Klassen mit nur öffentlichen statischen Methoden vs instanziierten Klassen
- 9. Verwenden von Structs innerhalb von Klassen aus anderen Klassen
- 10. Kartenspiel mit Methoden und mehreren Klassen
- 11. Fangen Ausnahmen mit anderen Klassen
- 12. mit toString von anderen Methoden
- 13. Warum ist es nicht möglich, Tests Methoden aus anderen Baugruppen
- 14. Abstrakte Methoden ohne abstrakte Klassen
- 15. Welche Klassen Methoden zu erstellen?
- 16. Probleme mit privaten Variablen Methoden und Klassen
- 17. zwei Klassen mit gemeinsamen Methoden und Eigenschaften
- 18. Python - Benutzerdefinierte Klassen haben standardmäßig __cmp __() und __hash __() -Methoden? Oder?
- 19. Abstrakte Klassen (mit reinen virtuellen Methoden) in Cython
- 20. Zugriff auf Methoden aus einer anderen Klasse in C#
- 21. Methoden wie ord und chr aus Python
- 22. Generische Klassen in generischen Methoden
- 23. Statische Methoden für generische Klassen?
- 24. Lua: Methoden und Eigenschaften beim Exportieren von Klassen aus c
- 25. Wiederholte Funktionalität/Code in Python-Klassen, Initialisierer und Methoden
- 26. Convenience Methoden in Python
- 27. Einheitentestansatz für generische Klassen/Methoden
- 28. Überschreiben Sie die Methoden von Klassen aus einer WAR-Datei
- 29. Karte von Methoden aus verschiedenen Klassen in C++
- 30. Python - aufrufende Klasse aus einer anderen Klasse
schrecklich und unlesbar IMHO. –
Hier gibt es keine Mehrfachvererbung. Dies ist eine einzelne Vererbung, obwohl Sie möglicherweise an eine hierarchische Vererbung denken. – Nikwin
@Nikwin, +1, wie ich das gerade sagen wollte. –