πŸ”’ Как Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ def Π² Python: простой Π³ΠΈΠ΄ для Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ²

Как Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ def Π² Python?

Π’ Python Π½Π΅Ρ‚ явного способа Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ (def) ΠΊΠ°ΠΊ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΄Ρ€ΡƒΠ³ΠΈΡ… языках программирования. ВмСсто этого, Π² Python ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ соглашСниС ΠΎ Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΈ для указания, Ρ‡Ρ‚ΠΎ функция являСтся ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½ΠΎΠΉ ΠΈ Π½Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для нСпосрСдствСнного использования ΠΈΠ·Π²Π½Π΅.

Для указания приватности Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ прСфикс с ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, def _private_function():. Однако это являСтся всСго лишь соглашСниСм, ΠΈ фактичСски функция остаСтся доступной ΠΈΠ·Π²Π½Π΅.

ΠšΡ€ΠΎΠΌΠ΅ этого, Π² Python Π΅ΡΡ‚ΡŒ Π΄Π²Π° способа ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

  • ИспользованиС модуля "name mangling": ΠŸΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Π΄Π²ΡƒΡ… ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠΈΠ²Π°Π½ΠΈΠΉ ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, def __private_function():, Python ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΡƒΠ΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π΄ΠΎΠ±Π°Π²ΠΈΠ² прСфикс с ΠΈΠΌΠ΅Π½Π΅ΠΌ класса. Π­Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π½Π΅ доступной ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, Π½ΠΎ ΠΎΠ½Π° остаСтся доступной Π²Π½ΡƒΡ‚Ρ€ΠΈ класса.
  • ИспользованиС Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… (nested) Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ: Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈ ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ доступна Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ внСшнСй Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π­Ρ‚ΠΎ позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π΅ доступныС ΠΈΠ·Π²Π½Π΅.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠ΄Π°:


def _private_function():
    # ΠŸΡ€ΠΈΠ²Π°Ρ‚Π½Π°Ρ функция
    pass

class MyClass:
    def __private_function():
        # ΠŸΡ€ΠΈΠ²Π°Ρ‚Π½Π°Ρ функция
        pass

    def public_function(self):
        # ΠŸΡƒΠ±Π»ΠΈΡ‡Π½Π°Ρ функция
        pass

    def nested_function(self):
        def private_nested():
            # ΠŸΡ€ΠΈΠ²Π°Ρ‚Π½Π°Ρ влоТСнная функция
            pass

        # Код Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
        pass

Π’Π°ΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ соглашСниС ΠΎ Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ доступ ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’ Python основной ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ - "ВзрослыС люди Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π°Π±ΠΎΡ‚ΠΈΡ‚ΡŒΡΡ ΠΎ своих Π΄Π΅Π»Π°Ρ…." Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, эти способы ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ доступ ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ функция ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ использования.

Π”Π΅Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚

Как Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ (def) Π² Python?

Π’ Python Ρƒ нас Π΅ΡΡ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ для создания Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ - это использованиС ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ ΠΈΠΌΠ΅Π½ с Π΄Π²ΠΎΠΉΠ½Ρ‹ΠΌΠΈ подчСркиваниями (double underscore) Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΈΠΌΠ΅Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΈΠΌΠ΅Π½ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования:

  
  def __private_function():
      print("Π­Ρ‚ΠΎ закрытая функция")

  def public_function():
      print("Π­Ρ‚ΠΎ публичная функция")
      __private_function()  # Π’Ρ‹Π·ΠΎΠ² Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

  public_function()  # Π’Ρ‹Π·ΠΎΠ² ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
  
  

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ρƒ нас Π΅ΡΡ‚ΡŒ Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ - `__private_function()` ΠΈ `public_function()`. Ѐункция `__private_function()` являСтся Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π΅Ρ‘ имя начинаСтся с Π΄Π²ΠΎΠΉΠ½ΠΎΠ³ΠΎ подчСркивания.

Ѐункция `public_function()` являСтся ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π΅Ρ‘ имя Π½Π΅ начинаСтся с Π΄Π²ΠΎΠΉΠ½ΠΎΠ³ΠΎ подчСркивания. Π’Π½ΡƒΡ‚Ρ€ΠΈ этой ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ `__private_function()` ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ дСйствия.

Однако, ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π²Π½Π΅ основной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ класса, ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΎΡˆΠΈΠ±ΠΊΡƒ:

  
  __private_function()  # Ошибка: NameError: name '__private_function' is not defined
  
  

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, использованиС Π΄Π²ΠΎΠΉΠ½ΠΎΠ³ΠΎ подчСркивания ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° позволяСт ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ нСсанкционированный доступ ΠΊ этим элСмСнтам ΠΈΠ·Π²Π½Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ класса.

Однако, слСдуСт ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² Python это скорСС соглашСниС, Π° Π½Π΅ строгая ΠΏΡ€Π°Π²ΠΈΠ»Π°. Имя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰Π΅Π΅ΡΡ с Π΄Π²ΠΎΠΉΠ½ΠΎΠ³ΠΎ подчСркивания, просто мСняСтся Π½Π° "имя класса" + "Π΄Π²ΠΎΠΉΠ½ΠΎΠ΅ ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠΈΠ²Π°Π½ΠΈΠ΅" + "имя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ". Π­Ρ‚ΠΎ дСлаСтся для прСдотвращСния возмоТности пСрСопрСдСлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°, Ссли ΠΎΠ½Π° наслСдуСтся Π² подклассС.

Π’ΠΈΠ΄Π΅ΠΎ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅

35 Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ (def) Π² Python. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

#35. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ: ΠΏΠ΅Ρ€Π²ΠΎΠ΅ знакомство, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ def ΠΈ ΠΈΡ… Π²Ρ‹Π·ΠΎΠ² | Python для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…

9 УРОК - Ѐункция def ΠΈ Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ return | ΠŸΠžΠ›ΠΠ«Π™ КУРБ PYTHON

ΠŸΠΎΡ…ΠΎΠΆΠΈΠ΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ:

πŸ” КакиС ΠΏΡ€Π°Π²ΠΈΠ»Π° языка Python? Π£Π·Π½Π°ΠΉΡ‚Π΅ ΠΎ Π³Π»Π°Π²Π½Ρ‹Ρ… ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ… языка Python здСсь!

βš‘οΈΠ§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ Π² Python? ⚑️

πŸ” Как Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ» Π² Python Π΄ΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ условия? 🐍

πŸ”’ Как Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ def Π² Python: простой Π³ΠΈΠ΄ для Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ²

πŸš€ Как ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π»Π°ΡƒΠ½Ρ‡Π΅Ρ€ для Minecraft Π½Π° Python: пошаговая инструкция

πŸ”§ Как ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Python Π½Π° Mac Ρ‡Π΅Ρ€Π΅Π· Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»: простая ΠΈ быстрая инструкция

πŸ” Как Π²Π·ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Python: простой Π³Π°ΠΉΠ΄ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ 🐍