Sobes.tech
Middle
256

Python-ში ერთეული და ორმაგი ხაზის განსხვავება რა არის?

პასუხი AI-სგან

sobes.tech AI

Python-ში ერთჯერადი ხაზგასმა (_) აქვს რამდენიმე გამოყენება:

  • ტრადიციულად გამოიყენება "შიდა" ან "პირადი" თვისებების და მეთოდების ნიშნულისთვის კლასებში. ეს არის შეთანხმება შემქმნელებისთვის, არა მკაცრი წესია ინტერპრეტატორის მიერ.
  • გამოიყენება Python ინტერპრეტატორის ინტერკტივ სესიაში, რათა შეინახოს ბოლო შესრულებული გამოთვლის შედეგი.
  • გამოიყენება for ციკლში ან მინიჭებაში, რათა მიუთითოს ცვლადი, რომლის მნიშვნელობა არ იქნება გამოყენებული.
  • გამოიყენება ინტერნაციონალიზაციის (gettext)თვის.

ორმაგი ხაზგასმა (__) Python-ში გამოიყენება:

  • სახელების მანგლინგი (name mangling): გამოიყენება "პოლუ-პირადი" თვისებების და მეთოდების შესაქმნელად. Python ინტერპრეტატორი იცვლის ამ თვისების სახელს, დამატებით _კლასისსახელი დასაწყისში, რაც ხდის მის მისაწვდომობას გარე მხრიდან რთულს.

    class MyClass:
        def __init__(self):
            self.__private_var = 10
    
        def public_method(self):
            print(self.__private_var)
    
    obj = MyClass()
    # პირდაპირი მისაწვდომობა გამოიწვევს AttributeError-ს
    # print(obj.__private_var)
    
    # მანგლინგის საშუალებით მისაწვდომობა
    print(obj._MyClass__private_var)
    
  • "Dunder" მეთოდები (Magic methods): სპეციალური მეთოდები, რომლებიც იწყება და მთავრდება ორჯერ ხაზგასმით (__init__, __str__, __add__), რომლებიც იძახიან გარკვეული ოპერაციების შესრულებისას (ობიექტის ინიციალიზაცია, სტრინგად გარდაქმნა, დამატება და ა.შ.).

შედარება:

მახასიათებელი ერთჯერადი ხაზგასმა (_) ორჯერ ხაზგასმა (__)
მიზანი კონვენცია, რომელიც აღნიშნავს "შიდა" ელემენტებს; დროებითი შენახვა; ცვლადის იგნორირება; ინტერნაციონალიზაცია. სახელი მანგლინგი ("პოლუ-პირადი" ელემენტებისთვის); "dunder" მეთოდები.
ინტერპრეტატორის მიერ დამუშავება ინტერპრეტატორი არ ახორციელებს სპეციალურ დამუშავებას სახელზე. ინტერპრეტატორი ახორციელებს სახელების მანგლინგს __-ით დაწყებული ატრიბუტებისა და მეთოდებისთვის (без ბოლო __).
გარე წვდომა კლასი პირდაპირი წვდომა შესაძლებელია. წვდომა გამძაფრებულია მანგლინგის გამო. წვდომა სახელით _კლასისსახელი__სახელი.

ამიტომ, ძირითადი განსხვავება ის არის, რომ ორჯერ ხაზგასმა ამოქმედებს სახელების მანგლინგის მექანიზმს ინტერპრეტატორის მიერ კლასის ატრიბუტებისა და მეთოდებისთვის, ხოლო ერთჯერადი ხაზგასმა უფრო კონვენციაა სახელებისათვის, რომელიც პირდაპირ არ ზეგავლენს ახდენს ინტერპრეტატორის ქცევაზე (გამონაკლისი ინტერფეისისა და ინტერნაციონალიზაციის დროს).