Метод вызовы в определении класса [закрыто]Python

Программы на Python
Ответить
Anonymous
 Метод вызовы в определении класса [закрыто]

Сообщение 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()

Мой вопрос касается тела класса, а не того, что я могу делать вне его: инструкция 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»