Hoe importeer ik de klasse in dezelfde map of submap?

Ik heb een map waarin alle .py-bestanden zijn opgeslagen.

bin/
   main.py
   user.py # where class User resides
   dir.py # where class Dir resides

Ik wil klassen van user.pyen dir.pygebruiken in main.py.
Hoe kan ik deze Python-klassen importeren in main.py?
Bovendien, hoe kan ik klasse Userimporteren als user.pyzich in een submap bevindt?

bin/
    dir.py
    main.py
    usr/
        user.py

Antwoord 1, autoriteit 100%

Python 2

Maak een leeg bestand met de naam __init__.pyin dezelfde map als de bestanden. Dat betekent voor Python dat het “oké is om uit deze map te importeren”.

Doe dan gewoon…

from user import User
from dir import Dir

Hetzelfde geldt als de bestanden zich in een submap bevinden – plaats ook een __init__.pyin de submap en gebruik dan gewone importinstructies, met puntnotatie. Voor elk mapniveau moet u iets toevoegen aan het importpad.

bin/
    main.py
    classes/
        user.py
        dir.py

Dus als de map “classes” heette, dan zou je dit doen:

from classes.user import User
from classes.dir import Dir

Python 3

Hetzelfde als de vorige, maar voeg een .als er geen submap wordt gebruikt:

from .user import User
from .dir import Dir

Antwoord 2, autoriteit 14%

Ik heb net geleerd (dankzij martineau’s commentaar) dat u, om klassen uit bestanden in dezelfde map te importeren, nu in Python 3 zou schrijven:

from .user import User
from .dir import Dir

Antwoord 3, autoriteit 4%

In uw main.py:

from user import Class

waarbij Classde naam is van de klas die u wilt importeren.

Als je een methode van Classwilt aanroepen, kun je deze aanroepen met:

Class.method

Houd er rekening mee dat er een leeg bestand __init__.pyin dezelfde map moet staan.


Antwoord 4, autoriteit 3%

In python3 is __init__.pyniet meer nodig. Als de huidige map van de console de map is waar het python-script zich bevindt, werkt alles goed met

import user

Dit werkt echter niet als het wordt aangeroepen vanuit een andere directory, die geen user.pybevat.
Gebruik in dat geval

from . import user

Dit werkt zelfs als je het hele bestand wilt importeren in plaats van alleen een klas vanaf daar.


Antwoord 5

Je kunt de module importeren en toegang krijgen via de naam als je geen functies en klassen met de jouwe wilt mixen

import util # imports util.py
util.clean()
util.setup(4)

of u kunt de functies en klassen in uw code importeren

from util import clean, setup
clean()
setup(4)

je kunt wildchar * gebruiken om alles in die module naar je code te importeren

from util import *
clean()
setup(4)

Antwoord 6

Als user.py en dir.py geen klassen bevatten, dan

from .user import User
from .dir import Dir

werkt niet. U moet dan importeren als

from . import user
from . import dir

Antwoord 7

Om het begrijpelijker te maken:

Stap 1: laten we naar één map gaan, waar alles wordt opgenomen

$ cd /var/tmp

Stap 2: laten we nu een class1.py-bestand maken met de klassenaam Class1 met wat code

$ cat > class1.py <<\EOF
class Class1:
    OKBLUE = '\033[94m'
    ENDC = '\033[0m'
    OK = OKBLUE + "[Class1 OK]: " + ENDC
EOF

Stap 3: laten we nu een class2.py-bestand maken met de klassenaam Class2 met wat code

$ cat > class2.py <<\EOF
class Class2:
    OKBLUE = '\033[94m'
    ENDC = '\033[0m'
    OK = OKBLUE + "[Class2 OK]: " + ENDC
EOF

Stap 4: laten we nu één main.py maken die één keer wordt uitgevoerd om Class1 en Class2 uit 2 verschillende bestanden te gebruiken

$ cat > main.py <<\EOF
"""this is how we are actually calling class1.py and  from that file loading Class1"""
from class1 import Class1 
"""this is how we are actually calling class2.py and  from that file loading Class2"""
from class2 import Class2
print Class1.OK
print Class2.OK
EOF

Stap 5: voer het programma uit

$ python main.py

De uitvoer zou zijn

[Class1 OK]: 
[Class2 OK]:

Antwoord 8

Python 3


Dezelfde directory.

importbestand:log.py

importklasse: SampleApp().

import log
if __name__ == "__main__":
    app = log.SampleApp()
    app.mainloop()

of

directory is basic.

importeren in bestand: log.py.

importklasse: SampleApp().

from basic import log
if __name__ == "__main__":
    app = log.SampleApp()
    app.mainloop()

Antwoord 9

from user import User
from dir import Dir

Antwoord 10

Ik weet niet zeker waarom dit werkt, maar ik gebruik Pycharm build from file_in_same_dir import class_name

De IDE heeft erover geklaagd, maar het lijkt erop dat het nog steeds werkt. Ik gebruik Python 3.7


Antwoord 11

Voor python3

importeren van broer of zus: from .user import User
importeer van neef: from .usr.user import User


Antwoord 12

Als je filename.pyin dezelfde map hebt staan, kun je het gemakkelijk als volgt importeren:

import filename

Ik gebruik python3.7


Antwoord 13

# My Python version: 3.7
# IDE: Pycharm 2021.1.2 Community
# Have "myLib" in folder "labs":
class Points:
    def __init__(self, x = 0, y = 0):
        self.__x = x
        self.__y = y
    def __str__(self):
        return f"x = {self.__x}, y = {self.__y}"
# Have "myFile" in (same) folder "labs":
from myFile import Point
p1 = Point(1, 4)
p2 = Point(1, 4)
print(f"p1: {p1}, p2: {p2}")
# Result:
# p1: x = 1, y = 4, p2: x = 1, y = 4
# Good Luck!

Antwoord 14

Voor Python 3+, stel dat je deze structuur hebt:

A/
  __init__.py
  bar.py
  foo.py

In uw __init__.py-bestand kunt u from . import foo

dan kun je foo importeren in het barbestand

# A/bar.py
from foo import YourClass

Het doel van de __init__.py-bestanden is om optionele initialisatiecode op te nemen die wordt uitgevoerd wanneer verschillende niveaus van een pakket worden aangetroffen. alles wat u in de __init__.pyplaatst, wordt geïnitialiseerd tijdens het laden van het pakket.


Antwoord 15

Gewoon te kort,
Maak een bestand __init__.pyin de klassendirectory en importeer het vervolgens in uw script zoals het volgende (Importeer alle hoofdletters)

from classes.myscript import *

Alleen geselecteerde lessen importeren

from classes.myscript import User
from classes.myscript import Dir

Antwoord 16

Python3

gebruik

from .user import User inside dir.py file

en

use from class.dir import Dir inside main.py
or from class.usr import User inside main.py

vind ik leuk


Antwoord 17

om uit dezelfde map te importeren

from . import the_file_you_want_to_import 

om te importeren uit de submap die de map moet bevatten

init.py

andere bestanden dan je bestanden dan

uit map importeer uw_bestand

LEAVE A REPLY

Please enter your comment!
Please enter your name here

8 + thirteen =

Other episodes