Frage

Ich habe versucht, Unterklasse threading.Condition heute früher, aber es nicht geklappt hat. Hier ist die Ausgabe des Python-Interpreter, wenn ich versuche, die threading.Condition Klasse, Unterklasse:

>>> import threading
>>> class ThisWontWork(threading.Condition):
...     pass
... 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: Error when calling the metaclass bases
    function() argument 1 must be code, not str

Kann jemand erklären diesen Fehler? Dank!

War es hilfreich?

Lösung

Sie bekommen diese Ausnahme, denn trotz seiner Klasse wie Name, threading.Condition eine Funktion ist, und Sie können nicht Unterklasse Funktionen.

>>> type(threading.Condition)
<type 'function'>

Das nicht-sehr-nützlich Fehlermeldung wurde auf dem Python Bugtracker angehoben, aber es war markiert "nicht beheben."

Andere Tipps

anderes Problem als OP hatte, aber man kann auch diese Fehlermeldung erhalten, wenn Sie Unterklasse von einem Modul statt einer Klasse versuchen (z versuchen, Sie zu vererben My.Module statt My.Module.Class). Ein großes Lob an dieser Beitrag mir geholfen diese heraus.

  

Typeerror: Fehler, wenn die Metaklasse Basen Aufruf

     

Für diese, ist die Antwort, dass Sie wahrscheinlich eine Python-Klasse mit dem Namen der   Gleiche wie das Modul (das heißt die Datei), dass es in. Sie dann   importiert das Modul und versucht, es zu benutzen wie eine Klasse. Du hast das getan   weil du, wie ich, waren wahrscheinlich ein Java-Programmierer nicht so lange   :-) vor. Die Art und Weise, es zu beheben ist die module.class zu importieren statt   nur das Modul. Oder um ihrer selbst willen Verstand, ändern Sie den Namen der Klasse   oder das Modul so, dass es mehr auf der Hand, was importiert werden wird.

In Bezug zu einem Modul Subklassen, das ist ein wirklich einfacher Fehler ist, wenn Sie zu machen haben, zum Beispiel definierte Klasse Foo in einer Datei Foo.py. Wenn Sie eine Unterklasse von Foo in einer anderen Datei erstellen, können Sie die folgende versehentlich tun (dies ist ein Versuch, ein Modul zu Unterklasse und zu einem Fehler führen werden):

import Foo
class SubclassOfFoo(Foo):

Wenn Sie wirklich brauchen, entweder zu tun:

from Foo import Foo
class SubclassOfFoo(Foo):

oder:

import Foo
class SubclassofFoo(Foo.Foo):

Bitte beachten Sie: Diese Antwort soll wirklich ein Kommentar über die Antwort sein, das ein Modul Nennung Subklassen, aber ich kann es keinen Kommentar, weil das Stackoverflow Verhaltens in diesem Beitrag beschrieben: https://meta.stackexchange.com/questions/ 23211 / wie-do-i-Add-a-Kommentar-to-an-Antwort Verwenden Sie es nicht überstimmen, nur weil das.

Gotten in das gleiche Problem. Schließlich gelöst durch einen scharfen Blick auf den Code zu nehmen und das ist, wo die TypeError dass Alarme über einen String statt Code zustande kommt ..

Class Class_name(models.model): //(gives a TypeError of 'str' type) 

"und"

Class Class_name(models.Model): // is the correct one. 

Beachten Sie, dass bestimmte Fehler kommt wegen eines einzigen Kleinbuchstaben zu dem Code „ Modell “, was wiederum macht es eine Zeichenfolge

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top