Ich denke, die Antwort auf Ihre Frage ist einfach Syntax. Das ist nur die Art und Weise Python eingerichtet ist, aber mein nehmen, wie man es so geworden ist:
Ich Funktionen würde denken, kam aus der Mathematik Dinge wie:
f(x) = x
Also, wenn Computer-Programmiersprachen wurden Dort entstanden scheint eine logische Kontinuität von der analogen Mathematik in Programmiersprachen gewesen.
Klassen auf der anderen Seite sind mehr Konstrukte der Informatik und repetitive Speicherverwaltung, so dass sie nicht auf diese Weise erstellt wurden, sondern weil sie eine funktionale Qualität zu ihnen haben, erhielten sie ähnliche Notation.
Für Python, werde ich den Begriff method
für function
verwenden wie die üblichen Kauderwelsch ist ...
Ich verstehe Ihr Argument, dass sowohl ein class
und method
sollte definiert werden, erlaubt werden, indem eine Abkürzung in das kein Argument Fall:
- für
class
es, wenn es keine inheritence
- für
method
s, wenn es keine Argumente
Ein Grund, an den ich denken kann, ist für Konsistenz über Verbrauch und Definition. Lassen Sie uns einige Beispiele an:
Definition:
def funcA():
return 0
def funcB(arg):
return arg
und Sie wollen, dass funciton nennen:
>>> funcA()
>>> functB("an argument")
und
>>> f1 = funcA
>>> f2 = funcB
>>> f1()
>>> f2("another argument")
Referenzen übergeben und sie nennen.
Die Syntax der Paranthese zwischen method
Deklaration ist konsistent mit dem Aufruf der methods
.
Sie müssen diese leeren Klammern setzen, sonst wird der Interpreter Ihnen einen Verweis auf die method
geben und nicht tatsächlich aufrufen.
So ein Vorteil ist es macht Ihren Code sehr klar.
Definition:
class classA:
pass
class classB(object):
pass
Nutzung:
# create an instance
my_instance_of_A = classA()
my_instance_of_B = classB()
# pass a reference
my_ref_to_A = classA
my_ref_to_B = classB
# call by reference
new_A = my_ref_to_A()
new_B = my_ref_to_B()
Hier gibt es keine Änderung im Verhalten in Bezug auf, ob die class
erbt oder nicht, wird sein Rufverhalten diktiert durch das, was seine internen oder geerbt __init__
Methode ist definiert als.
Ich denke, die aktuelle Einrichtung der Forderung nach dem leeren ()
macht den Code für das ungeübte Auge besser lesbar.
Wenn Sie wirklich wirklich wirklich wollen, zu tun, was Sie fragen, es eine Abhilfe ist ... Sie könnte dies immer tun:
func = lambda: "im a function declared with no arguments, and I didn't use parenthesis =p"
, die aufgerufen werden können:
>>> func
<function <lambda> at 0x6ffffef26e0>
>>> func()
"im a function declared with no arguments, and I didn't use parenthesis =p"
Aber die python holy book says No
Warum sollte es nicht so sein? Klassen sind keine Funktionen. Abstimmung zu schließen, weil ich denke, dass dies eine meinungsbasierte Frage ist. Ich bezweifle, dass es eine objektive Antwort gibt. –
Ich bin an Bord, dass eine No-Args-Funktion keine leeren Klammern benötigen sollte, aber das ist meine Meinung und einfach nicht die Art, wie Python funktioniert. Andere Sprachen wie Ruby nehmen optional-Klammern bis zum Äußersten und es hat ... Vor- und Nachteile. – roippi
[In 2005] (https://mail.python.org/pipermail/python-dev/2005-February/051712.html) waren leere Klammern nicht erlaubt. – kojiro