Tanımlayıcılar

Python'da Orta Düzey Nesne Yönelimli Programlama

Jake Roach

Data Engineer

Özniteliklerle etkileşimi değiştirme

class Student:
    def __init__(self, name, ssn):
        self.name = name
        self.ssn = ssn
# Bir öğrenci nesnesi oluşturun ve "ssn" özniteliğine erişin
shaw = Student("Daniel Shaw", "193-80-1821")
print(shaw.ssn)

# Değer değiştirilir veya silinirse ne olur? Nasıl ele alınmalı?
193-80-1821
Python'da Orta Düzey Nesne Yönelimli Programlama

@property ile tanımlayıcı oluşturma

Tanımlayıcılar, bir özniteliğin nasıl okunacağını, yazılacağını veya silineceğini düzenleyen nesnelerdir

@property ile tanımlayıcı oluşturun

  • "getter", "setter", "deleter"
  • Yöntem adı == öznitelik adı

Tanımlayıcılar ayrıca şunlarla da oluşturulabilir...

  • property() işlevi
  • __get__(), __set__(), __delete__()

$$

class Student:
    def __init__(self, name, ssn):
        self.name = name
        self.ssn = ssn

    @property  
    def ssn(self):
        return "XXX-XX-" + self._ssn[-4:]

    @ssn.setter  
    def ssn(self, new_ssn):
        self._ssn = new_ssn 

    @ssn.deleter
    def ssn(self):
        raise AttributeError("Can't delete SSN")
Python'da Orta Düzey Nesne Yönelimli Programlama

@property

class Student:
    def __init__(self, name, ssn):
        self.name = name
        self.ssn = ssn  # Alt çizgi olması gerekmez

    @property  
    def ssn(self):  # Bu bir "getter" yöntemidir
        return "XXX-XX-" + self._ssn[-4:]
  • ssn nasıl okunur kontrol eder
  • self.ssn değil, self._ssn ile çalışın
Python'da Orta Düzey Nesne Yönelimli Programlama

@ssn.setter

class Student:
    def __init__(self, name, ssn):
        self.name = name
        self.ssn = ssn
    ...

    @ssn.setter  
    def ssn(self, new_ssn):
        if len(new_ssn) == 11:
          # Örn. veri doğrulama,
          # diğer özniteliklerde işlemler vb.
          self._ssn = new_ssn

@<attribute-name>.setter

  • ssn için "setter" yöntemi
  • Veri kalitesini doğrulayın
  • Diğer öznitelikler üzerinde işlemler yapın

$$

$$

$$

self.ssn değil, self._ssn ile çalışmayı unutmayın!

Python'da Orta Düzey Nesne Yönelimli Programlama

@ssn.deleter

class Student:
    def __init__(self, name, ssn):
        self.name = name
        self.ssn = ssn

    ...

    @ssn.deleter
    def ssn(self):
        # Can perform clean up, soft delete, raise exception
        raise AttributeError("Can't delete SSN")
Python'da Orta Düzey Nesne Yönelimli Programlama

Tanımlayıcılar iş başında

shaw = Student("Daniel Shaw", "193-80-1821")
print(shaw.ssn)  # ssn özniteliğine erişin
XXX-XX-1821
shaw.ssn = "821-11-9380"  # Shaw'un SSN değerini güncelleyin
print(shaw.ssn)
XXX-XX-9380
del shaw.ssn  # ssn özniteliğini silmeyi deneyin
AttributeError: Can't delete SSN
Python'da Orta Düzey Nesne Yönelimli Programlama

Hadi pratik yapalım!

Python'da Orta Düzey Nesne Yönelimli Programlama

Preparing Video For Download...