Mam plik GP.py, który następnie uruchomić plik myBot.py.

W pliku myBot.py mam linię

from GP import *

Mam podejrzenie, że importuje cały plik zamiast tylko metod klasy i opisów klasy, które chcę. W pliku GP.py znajduje się kod oprócz definicji

8
SwimBikeRun 14 grudzień 2011, 13:40

5 odpowiedzi

Najlepsza odpowiedź

Nie można importować metod klasy oddzielnie, musisz zaimportować klasy. Możesz to zrobić, wyliczając klasy, które chcesz zaimportować:

from GP import class1, class2, class3

Zauważ, że nadal będzie ładować cały moduł. To zawsze dzieje się, jeśli importujesz coś z modułu. Jeśli masz kodowy w tym module, którego nie chcesz być wykonywany, gdy moduł jest importowany, możesz go tak chronić:

if __name__ == "__main__":
    # put code here

Kod wewnątrz bloku zostanie wykonany tylko wtedy, gdy moduł jest uruchomiony bezpośrednio, a nie, jeśli jest importowany.

16
Björn Pollex 14 grudzień 2011, 09:43

_single_leading_underscore: Słabe "wewnętrzne użycie" wskaźnik. Na przykład. from M import * nie importuje obiektów, których nazwa zaczyna się od podkreślać.

Użyj tego zamiast tego:

from GP import SomeClass

Spójrz na PEP-8 (Python Wskazówki) Jeśli chcesz użyć import *

Moduły zaprojektowane do użycia przez {X0}} powinny używać __all__ Mechanizm, aby zapobiec eksportowi global

5
Björn Pollex 14 grudzień 2011, 09:54

Nie zaleca się importowania wszystkich z modułu. Zen Pythona mówi, że "wyraźny jest lepszy niż niejawny"

Może mieć pewne działania niepożądane, nadając istniejącą nazwę. Zawsze należy zachować kontrolę nad przestrzeń nazw.

Możesz zaimportować swoje zajęcia i funkcję w ten sposób:

from GP import MyClass, my_function

Alternatywą jest import samego modułu

import GP
GP.my_function()
GP.MyClass()

W ten sposób tworzysz przestrzeń nazw dla modułu GP i uniknąć nadpisania czegoś.

Mam nadzieję, że to pomoże

4
luc 14 grudzień 2011, 09:49

Import * Rzeczywiście zaimportuj wszystkie klasy, funkcje, zmienne itp.

Jeśli chcesz zaimportować tylko określoną klasę

from GP import class_name

I o ile wiem, nie możesz importować tylko metod klasy

1
Gil.I 14 grudzień 2011, 09:44

Jeśli chcesz zaimportować tylko niektóre metody z klasy

from GP.MyClass import MyFunction
-3
inlanger 14 grudzień 2011, 10:00