2017-04-22 1 views
1

Ich kann Objekte aus einer Methode auf eine Weise aufrufen, die explizit einen Endpunkt definiert (diese REST-API ist wirklich eine Sammlung von RESTful-Endpunkten):Clean-Methode zum Importieren von Methoden (sep-Dateien) in eine Klasse definiert in __init__.py

dh:

import symphony 

pod_object = symphony.Pod(self.__uri__, self.__session__, self.__keymngr__) 
agent_object = symphony.Agent(self.__uri__, self.__session__, self.__keymngr__) 

agent.userid_by_email(email) 
pod.send_message(userid, message) 

Dies würde

from .Agent import Agent 
from .Auth import Auth 
from .Config import Config 
from .Crypt import Crypt 
from .Mml import Mml 
from .Pod import Pod 
from .RESTful import RESTful 

Dies wäre die __init__.py für eine Klasse Po der __init__.py für eine Modul Symphonie sein d in Modul Symphonie

class Pod(): 
    # basic methods 
    from .base import sessioninfo 
    # user methods 
    from .users import get_userid_by_email 
    from .users import get_user_id_by_user 
    from .users import user_feature_update 
    from .users import search_user 
    # streams methods 
    from .streams import adduser_to_stream 
    from .streams import create_stream 
    from .streams import create_stream_ni 
    from .streams import create_room 
    from .streams import update_room 
    # group methods 
    from .groups import ib_group_list 
    from .groups import ib_group_member_list 
    from .groups import ib_group_member_add 
    from .groups import ib_group_policy_list 
    # connection methods 
    from .connections import list_connections 
    from .connections import connection_status 
    from .connections import accept_connection 
    from .connections import create_connection 

    def __init__(self, url, session, keymngr): 
     self.__url__ = url 
     self.__session__ = session 
     self.__keymngr__ = keymngr 
     self.__rest__ = symphony.RESTful(self.__url__, self.__session__, self.__keymngr__) 

Ich habe so etwas. Und ich mag das wirklich .. Weil ich dann viele Klassen haben kann, die in Dir-Strukturen aufgeteilt sind, mit vielen Methoden, die in viele Dateien unterteilt sind. Säubere einfachen Code. Alle registrieren sich später auf einem Modul.

Aber ich muss Methoden einzeln registrieren, anstatt die gesamte Datei.

Gibt es eine Möglichkeit, alle Methoden in den Dateien sauber zu importieren?

Python2/3 kompatiblen Weg?

+1

Gute Trauer. Nein, das ist nicht sauber und einfach in meinem Buch, tut mir leid. Alle diese Namen, die Sie importieren, müssen als erstes Argument "self" haben und außerhalb eines Klassenkontexts liegen, was für andere Python-Entwickler, die zu dem Projekt kommen, nett und verwirrend sein wird. Warum nicht nur die Erbschaft? –

+0

nicht wirklich ... Sie importieren es in das Basismodul und es wird so einfach wie die Instanziierung des Moduls und Zugriff auf alle Methoden direkt aus dem Modul. zB: von .Pod importieren Pod in __init__.py für Modul. –

+0

Sie könnten das Klassenwörterbuch mit (einer leicht gefilterten Version) der Modulwörterbücher "aktualisieren"? Aber ehrlich gesagt sieht die ganze Sache für mich schrecklich aus. – DavidW

Antwort

-1

Das ist, nun, wirklich, ach, nicht so schön.

Wenn Ihre Klasse zu groß ist, um in eine Datei zu passen, ist sie einfach zu groß und sollte in mehrere Klassen unterteilt werden.

Die offensichtliche Lösung besteht darin, mehrere Basisklassen zu erstellen, eine für Benutzermethoden, eine für Stream-Methoden, eine für Gruppenmethoden und so weiter. Lassen Sie dann Ihre Pod Klasse von allen erben.

Ohne mehr über das Problem zu wissen, das Sie lösen möchten, ist es unmöglich, eine andere Methode für die Gestaltung Ihrer Klassen zu empfehlen. Es fühlt sich an, als würdest du nicht das Richtige tun, selbst wenn du Pod von all diesen Basisklassen erben lässt.

+0

Dies ist keine Antwort. –

+0

Eigentlich ist es eine Antwort, die Klasse in verschiedene Basen zu zerlegen und von ihnen allen zu erben. – zmbq

+0

Es würde Klassendefinitionen fördern, die zu lange sind, um lesbar zu sein. –

Verwandte Themen