Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.08.2016, 21:45   #1
mrprim
Пользователь
 
Регистрация: 07.06.2016
Сообщений: 52
По умолчанию разбитие проекта на несколько классов

Добрый вечер, у меня такой вопрос, у меня есть 2 класса в каждом есть мейн. Можно ли создать третий класс в котором в мейне будут вызываться эти оба класса?
mrprim вне форума Ответить с цитированием
Старый 12.08.2016, 00:26   #2
pompiduskus
юзер как все
Участник клуба
 
Аватар для pompiduskus
 
Регистрация: 10.01.2012
Сообщений: 1,586
По умолчанию

Да конечно


PHP код:

# --------------------------------------
class A(object):
    
def __init__self ):
        
pass;
    
def _printself ):
        print(
"class.A");

# --------------------------------------
class B(object):
    
def __init__self ):
        
pass;
    
def _printself ):
        print(
"class.B");

# --------------------------------------
class Main(object):
    
def __init__self ):
        
this.A();
        
this.A._print(); # >>> class.A

        
this.B();
        
this.B._print(); # >>> class.B

# --------------------------------------
_Main Main(); 
<Дзен - Вся вселенная в тебе > | Резюме: https://ch3ll0v3k.github.io/CV/
pompiduskus вне форума Ответить с цитированием
Старый 12.08.2016, 00:36   #3
mrprim
Пользователь
 
Регистрация: 07.06.2016
Сообщений: 52
По умолчанию

Цитата:
Сообщение от pompiduskus Посмотреть сообщение
Да конечно


PHP код:

# --------------------------------------
class A(object):
    
def __init__self ):
        
pass;
    
def _printself ):
        print(
"class.A");

# --------------------------------------
class B(object):
    
def __init__self ):
        
pass;
    
def _printself ):
        print(
"class.B");

# --------------------------------------
class Main(object):
    
def __init__self ):
        
this.A();
        
this.A._print(); # >>> class.A

        
this.B();
        
this.B._print(); # >>> class.B

# --------------------------------------
_Main Main(); 
воот отлично, почти то что нужно, спасибо большое.
а еще небольшой вопрос. к примеру

если есть 2 .py файла, в каждом из них ряд классов и в каждом файле они взаимодействуют между собой
файл1.py
Код:
class 1():
   print ("class1")

def Main:
     while 1:
         1()

Файл2.py
def main:
    #нужно вывести результат работы файла1
    #делать это аля this.1 = 1()???

Последний раз редактировалось Alex11223; 12.08.2016 в 01:23.
mrprim вне форума Ответить с цитированием
Старый 12.08.2016, 01:20   #4
pompiduskus
юзер как все
Участник клуба
 
Аватар для pompiduskus
 
Регистрация: 10.01.2012
Сообщений: 1,586
По умолчанию

еси файлы лежат в одной директории то можно импортирлвать клакк и файла вот та

PHP код:
from имя файла import имя класса 
<Дзен - Вся вселенная в тебе > | Резюме: https://ch3ll0v3k.github.io/CV/
pompiduskus вне форума Ответить с цитированием
Старый 12.08.2016, 02:44   #5
mrprim
Пользователь
 
Регистрация: 07.06.2016
Сообщений: 52
По умолчанию

Цитата:
Сообщение от pompiduskus Посмотреть сообщение
еси файлы лежат в одной директории то можно импортирлвать клакк и файла вот та

PHP код:
from имя файла import имя класса 
не ну то что нужно импортить это я понимаю. но нужно ли инициализировать во втором файле первый? или после импорта он автоматом выполнится
mrprim вне форума Ответить с цитированием
Старый 12.08.2016, 11:24   #6
pompiduskus
юзер как все
Участник клуба
 
Аватар для pompiduskus
 
Регистрация: 10.01.2012
Сообщений: 1,586
По умолчанию

Есть такая очень одобная конструкция в Python

PHP код:
# Если этот файл вызывается напрямую
if __name__ == "__main__":
    
# ...
    # ...
    # тогда выполнить этот бкол
    # ...
    # ... 
И в твоем случае этот будет как раз то что нужно


// Файл "classb.py" где находится второй класс

PHP код:

# file ["classb.py"]
# ============================================
class ClassB(object):

    
def __init__(self):
        print(
"hello from class B");

# ============================================
if __name__ == "__main__":
    
_ClassB ClassB(); 

А это основной файл "main_class.py"

PHP код:
from classb import ClassB

# file ["main_class.py"]
# ============================================
class MainClass(object):

    
def __init__(self):
        
this.ClassB ClassB(); # <= "hello from class B"        


# ============================================
if __name__ == "__main__":
    
_ClassB ClassB(); 
Получается, так-как мы не запускаем файл classb.py на прямую,
то строка _ClassB = ClassB(); никогда не выполнится.

Что очень удобно.

И еще на будущее тебе, скорее всего этот вопрос у тебя возникнет.
Представь что у тебя много разных файлов в проекте, и их можно разделить на несколько групп.

Я знаю что будут классы отвечающие за сеть, работу с файловой системой и графикой.
И было-бо очень удобно их разложить по папкам.

На пример, хотелось-бы наблюдать такую структуру.

PHP код:
// Корень проекта и текущая директория "/project_A/"

"/project_A/MainClass.py"

"/project_A/graphics/"
"/project_A/graphics/render.py"
"/project_A/graphics/textures.py"

"/project_A/fs/"
"/project_A/fs/recurs.py"
"/project_A/fs/fs_conveter.py"

"/project_A/network/"
"/project_A/network/requests.py"
"/project_A/network/ftp.py" 

Такая структура очень удобна будет, но Python не сможет ее понять.
Другими словами я не смогу написать так в главном классе.

PHP код:
from network.ftp import FTP 
Что-бы можно было обратитья к директории как к имени модуля нужно,
положить в каждую такую директорию пустой файл вот с таким именем.
Имя файла должно быть написано точь в точь как написано

PHP код:
__init__.py 
Теперь вся структура будет иметь вот такой вид.

PHP код:
// Корень проекта и текущая директория "/project_A/"

"/project_A/MainClass.py"

"/project_A/graphics/__init__.py"
"/project_A/graphics/render.py"
"/project_A/graphics/textures.py"

"/project_A/fs/__init__.py"
"/project_A/fs/recurs.py"
"/project_A/fs/fs_conveter.py"

"/project_A/network/__init__.py"
"/project_A/network/requests.py"
"/project_A/network/ftp.py" 
Удачи!
<Дзен - Вся вселенная в тебе > | Резюме: https://ch3ll0v3k.github.io/CV/

Последний раз редактировалось pompiduskus; 12.08.2016 в 11:45.
pompiduskus вне форума Ответить с цитированием
Старый 13.08.2016, 03:02   #7
mrprim
Пользователь
 
Регистрация: 07.06.2016
Сообщений: 52
По умолчанию

Цитата:
Сообщение от pompiduskus Посмотреть сообщение
Есть такая очень одобная конструкция в Python
...
Удачи!
Спасибо огромное вам, то что нужно!!! учту все советы)
mrprim вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разбитие строки на подстроки Bizunov SQL, базы данных 3 31.05.2013 15:01
Разбитие по функциям St@ter Помощь студентам 0 23.12.2012 17:01
GLScene, разбитие на модули Андрей 93 Gamedev - cоздание игр: Unity, OpenGL, DirectX 2 27.09.2011 13:22
Как корректно исключить несколько классов из ClassType? SkAndrew Общие вопросы Delphi 6 31.03.2010 22:05
Strings.DelimitedText разбитие edik Общие вопросы Delphi 7 28.12.2009 13:39