Рассмотрим следующий пример класса
class MyClass:
def my_method(some_text: str):
print(f"Your text is {some_text}")
DEFAULT_TEXT = "Creating MyClass"
my_method(DEFAULT_TEXT)
Допустим, я хочу распечатать default_text : «Создание myclass» прямо в начале, как только MyClass существует. Это правильный способ сделать это или вы можете предложить более элегантный и «питонный» способ сделать это? мне не помогает.class MyClass:
my_class = MyClass()
MyClass.my_class.do_something()
Мой вопрос касается тела класса, а не того, что я могу делать вне его: инструкция MyClass.my_class.do_something() находится вне тела определения MyClass, в моем случае my_method(DEFAULT_TEXT) используется внутри определения класса.
Он Похоже, что любой код, который я помещаю в тело класс, но вне любого метода, выполняется немедленно при запуске моей программы (как в моем коротком примере выше и в полном примере ниже). Можно ли этим воспользоваться или полагаться на такое поведение — плохая практика? Например, я хотел бы использовать его, чтобы гарантировать существование определенных каталогов, от которых зависит мой код. Есть ли лучший способ сделать это?
Теперь я опишу конкретный вариант использования, на который был экстраполирован мой пример. Пожалуйста, имейте в виду, что мне пришлось изменить каждую переменную и имя папки, потому что они не могут быть общедоступными.
import os.path
class MyClass:
def create_folders(paths):
"""
This function creates the folders if they do not exist.
Args:
paths (list): The list of paths.
Returns:
None
"""
for path in paths:
if not os.path.exists(path):
print(f"Creating path {path}")
os.makedirs(path)
PATH_PROJECT = 'C:\\projects\\'
INIT_PATH = 'C:\\Data\\'
CAT_PATH = os.path.abspath(os.path.join(INIT_PATH, "MAIN_CAT"))
SUB_CAT_1_FD = os.path.abspath(os.path.join(CAT_PATH, "SUB_1"))
SUB_CAT_2_FD = os.path.abspath(os.path.join(CAT_PATH, "SUB_2"))
SUB_CAT_3_FD = os.path.abspath(os.path.join(CAT_PATH, "SUB_3"))
SUB_CAT_4_FD = os.path.abspath(os.path.join(CAT_PATH, "SUB_4"))
CAT_1_CUST_VAL = os.path.abspath(os.path.join(SUB_CAT_1_FD, "FD"))
CAT_1_CUST_MAIN = os.path.abspath(os.path.join(SUB_CAT_1_FD, "MAIN"))
CAT_1_CUST_PROJECT_LINE = os.path.abspath(os.path.join(SUB_CAT_1_FD, "PR_LINE"))
CAT_1_CUST_FGX = os.path.abspath(os.path.join(SUB_CAT_1_FD, "FGX"))
CAT_2_CUST_SEN = os.path.abspath(os.path.join(SUB_CAT_2_FD, "SENIOR"))
CAT_2_CUST_MID = os.path.abspath(os.path.join(SUB_CAT_2_FD, "MID_SEG_opx"))
CAT_2_CUST_TN = os.path.abspath(os.path.join(SUB_CAT_2_FD, "tecnical"))
CAT_2_CUST_FIELD = os.path.abspath(os.path.join(SUB_CAT_2_FD, "field_OP"))
CAT_3_CUST_VAL = os.path.abspath(os.path.join(SUB_CAT_3_FD, "FD"))
CAT_3_CUST_MAIN = os.path.abspath(os.path.join(SUB_CAT_3_FD, "MAIN"))
CAT_3_CUST_NET = os.path.abspath(os.path.join(SUB_CAT_3_FD, "NETX"))
CAT_3_CUST_elements = os.path.abspath(os.path.join(SUB_CAT_3_FD, "elements"))
CAT_4_CUST_CUST = os.path.abspath(os.path.join(SUB_CAT_4_FD, "CUST"))
CAT_4_CUST_OPER = os.path.abspath(os.path.join(SUB_CAT_4_FD, "OPS"))
CAT_4_CUST_NET = os.path.abspath(os.path.join(SUB_CAT_4_FD, "NETX"))
CAT_4_CUST_COMPOSITES = os.path.abspath(os.path.join(SUB_CAT_4_FD, "elements"))
create_folders([PATH_PROJECT,INIT_PATH,
CAT_PATH,
SUB_CAT_1_FD,
SUB_CAT_2_FD,
SUB_CAT_3_FD,
SUB_CAT_4_FD,
CAT_1_CUST_VAL,
CAT_1_CUST_MAIN,
CAT_1_CUST_PROJECT_LINE,
CAT_1_CUST_FGX,
CAT_2_CUST_SEN,
CAT_2_CUST_MID,
CAT_2_CUST_TN,
CAT_2_CUST_FIELD,
CAT_3_CUST_VAL,
CAT_3_CUST_MAIN,
CAT_3_CUST_NET,
CAT_3_CUST_elements,
CAT_4_CUST_CUST,
CAT_4_CUST_OPER,
CAT_4_CUST_NET,
CAT_4_CUST_COMPOSITES]
)
Подробнее здесь: https://stackoverflow.com/questions/793 ... definition
Метод вызовы в определении класса [закрыто] ⇐ Python
Программы на Python
-
Anonymous
1737709867
Anonymous
Рассмотрим следующий пример класса
class MyClass:
def my_method(some_text: str):
print(f"Your text is {some_text}")
DEFAULT_TEXT = "Creating MyClass"
my_method(DEFAULT_TEXT)
Допустим, я хочу распечатать default_text : «Создание myclass» прямо в начале, как только MyClass существует. Это правильный способ сделать это или вы можете предложить более элегантный и «питонный» способ сделать это? мне не помогает.class MyClass:
my_class = MyClass()
MyClass.my_class.do_something()
Мой вопрос касается [b]тела класса[/b], а не того, что я могу делать [b]вне[/b] его: инструкция MyClass.my_class.do_something() находится вне тела определения MyClass, в моем случае my_method(DEFAULT_TEXT) используется [b]внутри[/b] определения класса.
Он Похоже, что любой код, который я помещаю в тело класс, но вне любого метода, выполняется немедленно при запуске моей программы (как в моем коротком примере выше и в полном примере ниже). Можно ли этим воспользоваться или полагаться на такое поведение — плохая практика? Например, я хотел бы использовать его, чтобы гарантировать существование определенных каталогов, от которых зависит мой код. Есть ли лучший способ сделать это?
Теперь я опишу конкретный вариант использования, на который был экстраполирован мой пример. Пожалуйста, имейте в виду, что мне пришлось изменить каждую переменную и имя папки, потому что они не могут быть общедоступными.
import os.path
class MyClass:
def create_folders(paths):
"""
This function creates the folders if they do not exist.
Args:
paths (list): The list of paths.
Returns:
None
"""
for path in paths:
if not os.path.exists(path):
print(f"Creating path {path}")
os.makedirs(path)
PATH_PROJECT = 'C:\\projects\\'
INIT_PATH = 'C:\\Data\\'
CAT_PATH = os.path.abspath(os.path.join(INIT_PATH, "MAIN_CAT"))
SUB_CAT_1_FD = os.path.abspath(os.path.join(CAT_PATH, "SUB_1"))
SUB_CAT_2_FD = os.path.abspath(os.path.join(CAT_PATH, "SUB_2"))
SUB_CAT_3_FD = os.path.abspath(os.path.join(CAT_PATH, "SUB_3"))
SUB_CAT_4_FD = os.path.abspath(os.path.join(CAT_PATH, "SUB_4"))
CAT_1_CUST_VAL = os.path.abspath(os.path.join(SUB_CAT_1_FD, "FD"))
CAT_1_CUST_MAIN = os.path.abspath(os.path.join(SUB_CAT_1_FD, "MAIN"))
CAT_1_CUST_PROJECT_LINE = os.path.abspath(os.path.join(SUB_CAT_1_FD, "PR_LINE"))
CAT_1_CUST_FGX = os.path.abspath(os.path.join(SUB_CAT_1_FD, "FGX"))
CAT_2_CUST_SEN = os.path.abspath(os.path.join(SUB_CAT_2_FD, "SENIOR"))
CAT_2_CUST_MID = os.path.abspath(os.path.join(SUB_CAT_2_FD, "MID_SEG_opx"))
CAT_2_CUST_TN = os.path.abspath(os.path.join(SUB_CAT_2_FD, "tecnical"))
CAT_2_CUST_FIELD = os.path.abspath(os.path.join(SUB_CAT_2_FD, "field_OP"))
CAT_3_CUST_VAL = os.path.abspath(os.path.join(SUB_CAT_3_FD, "FD"))
CAT_3_CUST_MAIN = os.path.abspath(os.path.join(SUB_CAT_3_FD, "MAIN"))
CAT_3_CUST_NET = os.path.abspath(os.path.join(SUB_CAT_3_FD, "NETX"))
CAT_3_CUST_elements = os.path.abspath(os.path.join(SUB_CAT_3_FD, "elements"))
CAT_4_CUST_CUST = os.path.abspath(os.path.join(SUB_CAT_4_FD, "CUST"))
CAT_4_CUST_OPER = os.path.abspath(os.path.join(SUB_CAT_4_FD, "OPS"))
CAT_4_CUST_NET = os.path.abspath(os.path.join(SUB_CAT_4_FD, "NETX"))
CAT_4_CUST_COMPOSITES = os.path.abspath(os.path.join(SUB_CAT_4_FD, "elements"))
create_folders([PATH_PROJECT,INIT_PATH,
CAT_PATH,
SUB_CAT_1_FD,
SUB_CAT_2_FD,
SUB_CAT_3_FD,
SUB_CAT_4_FD,
CAT_1_CUST_VAL,
CAT_1_CUST_MAIN,
CAT_1_CUST_PROJECT_LINE,
CAT_1_CUST_FGX,
CAT_2_CUST_SEN,
CAT_2_CUST_MID,
CAT_2_CUST_TN,
CAT_2_CUST_FIELD,
CAT_3_CUST_VAL,
CAT_3_CUST_MAIN,
CAT_3_CUST_NET,
CAT_3_CUST_elements,
CAT_4_CUST_CUST,
CAT_4_CUST_OPER,
CAT_4_CUST_NET,
CAT_4_CUST_COMPOSITES]
)
Подробнее здесь: [url]https://stackoverflow.com/questions/79374913/method-calls-in-class-definition[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия