Python'da Orta Düzey Nesne Yönelimli Programlama
Jake Roach
Data Engineer
class Student:
def __init__(self, student_name, major):
self.student_name = student_name
self.major = major
...
karina = Student("Karina", "Literature")
student.residence_hall # Var olmayan bir özniteliğe erişmeyi deneyin
...
AttributeError: 'Student' object has no attribute 'residence_hall'
# Yukarıdaki sınıf tanımının devamı
def __getattr__(self, name):
# Mantığı burada uygulayın
...
Bir nesnenin ad alanı, o nesneyle ilişkili özniteliklerin kümesidir
__getattr__() bir nesnenin ad alanı DIŞINDAKİ HERHANGİ bir özniteliğe erişme girişiminde çalışır
name parametresi alırAttributeError fırlatmak yerine özel işlev sunarclass Student:
def __init__(self, student_name, major):
self.student_name = student_name
self.major = major
def __getattr__(self, name):
print(f"""{name} does not exist in this object's namespace, try setting
a value for {name} first""")
karina.residence_hall # Şimdi residence_hall özniteliğini yeniden almaya çalışın
residence_hall does not exist in this object's namespace, try setting a value for
residence_hall first
__setattr__(), bir (yeni veya mevcut) öznitelik AYARLANDIĞINDA veya GÜNCELLENDİĞİNDE çalışır
__init__() ile ayarlananları da kapsarname ve value değerlerini alır__dict__ özniteliğinden yararlanır$$
$$
Öznitelik değişimlerini denetleme, doğrulama, dönüştürme
# Yukarıdaki sınıf tanımının devamı
def __setattr__(self, name, value):
# Mantığı burada uygulayın
...
# Özniteliği oluşturmak/güncellemek için
# __dict__ kullanın
self.__dict__[name] = value
__dict__ nesnenin tüm özniteliklerini saklar; veriyi almak ve depolamak için kullanılabilir
class Student:
def __init__(self, student_name, major):
self.student_name = student_name
self.major = major
def __setattr__(self, name, value):
# If value is a string, set the attribute using the __dict__ attribute
if isinstance(value, str):
print(f"Setting {name} = {value}")
self.__dict__[name] = value
else: # Otherwise, raise an exception noting an incorrect data type
raise Exception("Unexpected data type!")
# 'str' türünde bir değerle öznitelik ayarlayın
karina.residence_hall = "Honors College South"
print(karina.residence_hall)
Setting residence_hall = Honors College South
Honors College South
# 'int' türünde bir değerle öznitelik ayarlayın
karina.student_id = 19301872
...
raise Exception("Unexpected data type!")
Exception: Unexpected data type!
class Student:
...
def __getattr__(self, name):
# Yer tutucu ile öznitelik ayarlayın
self.__setattr__(name, None)
return None
def __setattr__(self, name, value):
if value is None: # Yer tutucu ayarlandığını bildirin
print(f"Setting placeholder for {name}")
self.__dict__[name] = value # Özniteliği ayarlayın
Python'da Orta Düzey Nesne Yönelimli Programlama