CodeBlanks Logo Icon CodeBlanks

Özel öznitelik

_ ve __ ile ad tuzaklarını öğrenirsin.

Özel öznitelik geleneği

Python'da bir özniteliğin özel olduğunu göstermek için başına alt çizgi konur: _balance. Bu bir yaşa değil, geleneksel bir anlaşmadır; dışarıdan erişimi engellemez ama kullanıcının bunu yapmaması beklenir.

İki alt çizgi __balance ise name mangling başlatır: Python, özniteliğin adını _ClassName__balance biçiminde değiştirir. Bu, alt sınıflarda çakışmayı azaltır. Tek alt çizgi günlük kapsüllemede yaygındır.

Dışarıdan erişim

Tek alt çizgili özniteliklere dışarıdan erişilebilir; Python bunu engellemez. Yine de bu, kapsülleme anlaşmasına aykırıdır. İki alt çizgili özniteliklere doğrudan erişilemez; _ClassName__ad gerekir.

Örnek: class Account:\n def __init__(self, balance):\n self._balance = balance. a._balance çalışır ama önerilmez. Kapsülleme, dış kodun iç veriyi doğrudan değiştirmesini zorlaştırmayı amaçlar; @property ile denetim ekleriz.

Uygulama Account'a özel öznitelik ekle

Account adında bir sınıf tanımla. def __init__(self, balance): metodu ekle ve gövdede self._balance = balance yaz. Sonra a = Account(100) ile örnek oluştur ve print(a._balance) ile yazdır.

Başlangıç kodu

main.py
# Account sınıfını tanımla

Örnek çözüm

main.py
# Account sınıfını tanımla
class Account:
    def __init__(self, balance):
        self._balance = balance

a = Account(100)
print(a._balance)

Beklenen çıktı

100

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Hangi önek name mangling başlatır?

  • _value
  • __value Doğru cevap
  • value_
  • Value

Açıklama: İki alt çizgi __value adını _ClassName__value biçimine çevirir.

2 Özel özniteliği tamamla

Soru
class Account:
    def __init__(self, balance):
        self.____ = balance
Cevap
class Account:
    def __init__(self, balance):
        self._balance = balance

Açıklama: _balance tek alt çizgili özel özniteliktir.

3 Ad geleneklerini eşle

Kavram Anlamı
_value Geleneksel özel
__value Ad büken
value Public

Orta seviye bölümündeki tüm dersler