Dziedziczenie klasy z metody

0

Staram się zrozumieć poniższy kawałek kodu i nie potrafię sobie z tym poradzić. Uczyłem się, że dziedziczyć można z klasy jednak tutaj wygląda to tak jakby dziedziczenie było z klasy, która znajduje się w metodzie o nazwie "models"?

from django.db import models

class Person(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)
1

Jak masz wątpliwości, zajrzyj do źródeł. Tym bardziej, że najwyraźniej nie masz pojęcia, co tak naprawdę importujesz, a importujesz pod-moduł o nazwie models, który wystawia na zewnątrz m.in. klasę Model - wszystko jest ok, nie robisz żadnej dziwnej magii odwołując się do tego modułu, by wyjąć klasę. Niemniej jednak dobrze by było wiedzieć, co się robi, zamiast snuć dziwne domysły :p

Dowód

0
superdurszlak napisał(a):

Jak masz wątpliwości, zajrzyj do źródeł. Tym bardziej, że najwyraźniej nie masz pojęcia, co tak naprawdę importujesz, a importujesz pod-moduł o nazwie models, który wystawia na zewnątrz m.in. klasę Model - wszystko jest ok, nie robisz żadnej dziwnej magii odwołując się do tego modułu, by wyjąć klasę. Niemniej jednak dobrze by było wiedzieć, co się robi, zamiast snuć dziwne domysły :p

Dowód

Dziękuję za odpowiedź. Tak nie mam pojęcia bo dopiero jestem na samym początku nauki django.

Czyli można powiedzieć, że w tym przypadku odwołuję się do zawartości /django/db a w nim katalog models, który jest pod-modułem? I w ten sposób mógłbym teoretycznie zaimportować też "migrations"?

(learning_log) [debek@dell db]$ pwd
/home/debek/.virtualenvs/learning_log/lib/python3.7/site-packages/django/db
(learning_log) [debek@dell db]$ ls
__init__.py  __pycache__  backends  migrations  models  transaction.py  utils.py

1

Moduł django zawiera podmoduł db, który zawiera moduł models, który wystawia na świat klasę Model.

Nie traktujmy odwoływania się do modułów 1:1 jak odwoływania się do katalogów, ale generalnie idea jest podobna - masz jakąś hierarchiczną strukturę i możesz sięgać do kolejnych poziomów etc. aż wydłubiesz to, czego potrzebujesz. W linijce z importem mówisz Z podmodułu db modułu django zaimportuj podmoduł models, natomiast odwołując się do klasy Model mówisz z tego zaimportowanego modułu models wyjmij klasę Model.

Możesz importować bezproblemowo wszystko, co samo w sobie też jest modułem. Generalnie moduł i folder to nie to samo, tzn. owszem, moduł jest jakimś katalogiem, ale też np. wystawia on plik __init__.py w którym np. można "powiedzieć", co dany moduł wystawia na świat. Bez tego pliku interpreter potrafi zgłupieć przy próbach importowania czegokolwiek :P migrations też jest modułem, więc jak najbardziej można z niego korzystać. No i oczywiście importować możesz moduły, klasy Pythonowe etc, jak zrobisz moduł z folderu ze zdjęciami kotów, to nie zaimportujesz tym do kodu zdjęć kotów :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1