Ähnlich wie in anderen Sprachen wie Dlang, wo Sie Funktionen mit den gleichen Namen definieren können; aber verschiedene Signaturen, so dass der Compiler unterscheiden kann, auf welche Funktion sich mehrdeutige Funktionsaufrufe beziehen.eine Möglichkeit, eine Klasse mit zwei Methoden mit demselben Namen zu erstellen, aber eine ist statisch und die andere ist eine Klassenmethode.
Ich hatte den Gedanken, dass Sie irgendwie Eigenschaften nachahmen könnten, weil sie Ihnen erlauben, auf der gleichen Funktion zu handeln, aber unterschiedliche Eingänge verwenden und unterschiedliche Ausgänge erhalten. Aber da das @property
-Tag nicht Python ist, und es in C neu zu erstellen, ist nichts sehr machbares noch effizientes arbeitsweises; Ich suche eine Möglichkeit, es entweder rein oder mit 3rd-Party-Bibliotheken zu tun.
class Socket:
def __init__(self, ip, port, auto_connect=False):
self.ip = ip
self.port = port
self.sockfd = socket.socket()
if auto_connect:
self.connect()
@staticmethod
def static_connect(sockfd, ip, port):
sockfd.connect((ip, port))
def connect(self):
self.sockfd.connect((self.ip, self.port))
Ich habe Figur auch, dass Sie nur die Funktionen anders nennen könnten, aber ich diesen Ansatz einfach nicht mögen, da es den Benutzer zu wissen, beinhaltet, dass die sekundäre Funktion existiert und zwar sinnvoll, nicht mein Stil.
Auch habe ich mir vorschlagen, dass ich etwas entlang der Linien von dies tun könnte:
Klasse Sockel: ... def verbinden (self, ip, port): ""“ Bei der Verwendung von statisch: self = Buchse ip = ip port = Port wenn er als Klassenmitglied mit: ip = ip & port = Port ""“
if isinstance(self, types.ClassType):
self.sockfd.connect((ip, port))
return
self.connect((ip, port))
Aber das ist nur unnatürlich und könnte zu Verwirrung führen, wenn jemand den Code liest, und ist unpythonisch.
HINWEIS: Diese Funktion repliziert das in here gezeigte Verhalten, aber es gelingt glücklicherweise, alle Parameter zu verwenden, und daher sind keine optionalen Parameter erforderlich, also entschuldige mich dafür, es nicht explizit zu erwähnen, aber meine Frage verlangt keinen Weg es mit Schlüsselwortargumenten.
tl; dr:
Klasse Funktionen, die verschiedenen Signaturen z.B .: statische Methode, aber nicht ersetzt jedes anderes und doch noch in geeigneter Weise
Mögliche Duplikate von [Wie verwende ich Methode überladen in Python?] (Https://stackoverflow.com/questions/10202938/how-doi-use-method-overloading-in-python) –