Size: a a a

Хирьянов Т.Ф., Практика программирования на Python 3 (2019)

2021 January 22

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
поскольку нет этого параметра - получите ошибку
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
при создании объекта
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
он не обязательно должен self называться, но он должен быть
источник

А

Айван in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Он же как функцию хочет использовать. Зачем про __init__ как дандер рассказываешь?
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
🚲 Oleh Kopyl UI/UX designer
Правильно ли называть функцию, которая обязательно должна отработать на старте программы __init__() ?

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

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
ну типа можно так назвать, да, но не стоит - с двойного подчеркивания начинаются приватные поля
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
в данном случае - модуля
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
например __name__ __dict__ и тд
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
вот как бы - пример как корявым неймингом с ходу меня ввели в заблуждение - я увидел __init__ и сразу подразумеваю что это метод класса
сразу вижу что нет аргумента
и что это ошибка
уже начал советовать пользоваться IDE опять которая это бы подчеркнула
и только тогда увидел что это просто метод
потратил время просто на ровном месте
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Айван
Он же как функцию хочет использовать. Зачем про __init__ как дандер рассказываешь?
👆
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Переслано от Alexander Meshkov
ребят, привет всем, чем отличаются методы класса, имя которых прописываем вот так: __namemethod___
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Переслано от std::slavik
ничем
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Переслано от std::slavik
но принято что с подчеркиваний начинаются приватные методы
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Переслано от std::slavik
# Creating a class
class A:
   # Declaring public method
   def fun(self):
       print("Public method of class A")
   # Declaring protected method
   def _fun(self):
       print("Protected method of class A")
       self.__fun()
   # Declaring private method
   def __fun(self):
       print("Private method of class A")

class B(A):
   # Declaring public method
   def fun(self):
       print("Public method of class B")
       self._fun()
   # Declaring private method
   def __fun(self):
       print("Private method of class B")

       
obj = B()

obj.fun()

>>Public method of class B
>>Protected method of class A
>>Private method of class A
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Переслано от std::slavik
obj._fun()

>>Protected method of class A
>>Private method of class A
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Переслано от std::slavik
но
obj.__fun()
>>AttributeError: 'B' object has no attribute '__fun'
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Переслано от std::slavik
но используя манглинг
obj._A__fun()
>>Private method of class A
obj._B__fun()
>>Private method of class B
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Переслано от std::slavik
print(B.__dict__)
>>{'__module__': '__main__', 'fun': <function B.fun at 0x0000017768917620>, '_B__fun': <function B.__fun at 0x0000017768B17268>, '__doc__': None}
то есть при создании словаря объекта B и A - имя метода которое начинается с двойного подчеркивания становится
_classname__methodname
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Переслано от std::slavik
можно вот так сделать:
obj.__fun = obj.__getattribute__('_A__fun')
obj.__fun()

>>Private method of class A
источник