Python'da Orta Düzey Nesne Yönelimli Programlama
Jake Roach
Data Engineer
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
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
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")
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 ederself.ssn değil, self._ssn ile çalışınclass 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$$
$$
$$
self.ssn değil, self._ssn ile çalışmayı unutmayın!
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")
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