Python Sınıfları ve Nesneleri (Örneklerle)

Bu eğitimde, Python nesnelerinin ve sınıflarının temel işlevleri hakkında bilgi edineceksiniz. Bir sınıfın ne olduğunu, nasıl oluşturulacağını ve programınızda kullanmayı öğreneceksiniz.

Video: Python Sınıfları ve Nesneleri

Python Nesneleri ve Sınıfları

Python, nesne yönelimli bir programlama dilidir. Ana vurgunun işlevler olduğu yordam yönelimli programlamanın aksine, nesne yönelimli programlama nesneler üzerinde vurgu yapar.

Bir nesne, basitçe bu veriler üzerinde etkili olan bir veri (değişkenler) ve yöntem (işlev) koleksiyonudur. Benzer şekilde, bir sınıf o nesnenin bir taslağıdır.

Sınıfı bir evin krokisi (prototipi) olarak düşünebiliriz. Katlar, kapılar, pencereler vb. İle ilgili tüm detayları içerir. Bu açıklamalara dayanarak evi inşa ediyoruz. Nesne evdir.

Bir evin planından birçok ev yapılabileceği için, bir sınıftan birçok nesne oluşturabiliriz. Bir nesneye ayrıca bir sınıfın örneği denir ve bu nesneyi yaratma sürecine örnekleme adı verilir .

Python'da Sınıf Tanımlama

Python'da işlev tanımlarının def anahtar sözcüğü ile başlaması gibi, sınıf tanımları da bir class anahtar sözcüğü ile başlar.

Sınıfın içindeki ilk dizgeye docstring denir ve sınıf hakkında kısa bir açıklama içerir. Zorunlu olmasa da, bu şiddetle tavsiye edilir.

İşte basit bir sınıf tanımı.

 class MyNewClass: '''This is a docstring. I have created a new class''' pass

Bir sınıf, tüm niteliklerinin tanımlandığı yeni bir yerel ad alanı oluşturur. Nitelikler veri veya işlevler olabilir.

İçinde çift alt çizgiyle başlayan özel nitelikler de vardır __. Örneğin, __doc__bize o sınıfın doktrini verir.

Bir sınıfı tanımladığımız anda, aynı isimle yeni bir sınıf nesnesi oluşturulur. Bu sınıf nesnesi, farklı niteliklere erişmemize ve bu sınıfın yeni nesnelerini başlatmamıza izin verir.

 class Person: "This is a person class" age = 10 def greet(self): print('Hello') # Output: 10 print(Person.age) # Output: print(Person.greet) # Output: 'This is my second class' print(Person.__doc__)

Çıktı

 10 Bu bir kişi sınıfı

Python'da Bir Nesne Oluşturma

Sınıf nesnesinin farklı niteliklere erişmek için kullanılabileceğini gördük.

Bu sınıfın yeni nesne örneklerini (somutlaştırma) oluşturmak için de kullanılabilir. Bir nesne yaratma prosedürü, bir işlev çağrısına benzer.

 >>> harry = Person()

Bu, harry adında yeni bir nesne örneği oluşturacaktır. Nesne adı önekini kullanarak nesnelerin niteliklerine erişebiliriz.

Nitelikler veri veya yöntem olabilir. Bir nesnenin yöntemleri, o sınıfın karşılık gelen işlevleridir.

Bu Person.greet, bir işlev nesnesi olduğu için (sınıfın özniteliği) Person.greetbir yöntem nesnesi olacağı anlamına gelir .

 class Person: "This is a person class" age = 10 def greet(self): print('Hello') # create a new object of Person class harry = Person() # Output: print(Person.greet) # Output:  print(harry.greet) # Calling object's greet() method # Output: Hello harry.greet() 

Çıktı

  Merhaba 

selfSınıfın içindeki fonksiyon tanımındaki parametreyi fark etmiş olabilirsiniz, ancak yöntemi harry.greet()herhangi bir argüman yokmuş gibi çağırdık . Hala işe yaradı.

Bunun nedeni, bir nesne yöntemini çağırdığında, nesnenin kendisinin ilk argüman olarak iletilmesidir. Yani, harry.greet()çevirir Person.greet(harry).

Genel olarak, n bağımsız değişken listesiyle bir yöntemi çağırmak, yöntemin nesnesini ilk bağımsız değişkenden önce ekleyerek oluşturulan bir bağımsız değişken listesiyle karşılık gelen işlevi çağırmaya eşdeğerdir.

Bu nedenlerle, sınıftaki işlevin ilk argümanı nesnenin kendisi olmalıdır. Buna geleneksel olarak benlik denir. Başka türlü adlandırılabilir, ancak sözleşmeye uymanızı şiddetle tavsiye ederiz.

Artık sınıf nesnesi, örnek nesnesi, işlev nesnesi, yöntem nesnesi ve bunların farklılıklarına aşina olmanız gerekir.

Python'da Oluşturucular

Çift alt çizgi ile başlayan sınıf işlevleri, __özel anlamlara sahip oldukları için özel işlevler olarak adlandırılır.

Özel ilgi alanlarından biri de __init__()işlevdir. Bu özel işlev, o sınıfın yeni bir nesnesi başlatıldığında çağrılır.

Bu tür işlev, Nesne Yönelimli Programlamada (OOP) yapıcılar olarak da adlandırılır. Normalde tüm değişkenleri başlatmak için kullanırız.

 class ComplexNumber: def __init__(self, r=0, i=0): self.real = r self.imag = i def get_data(self): print(f'(self.real)+(self.imag)j') # Create a new ComplexNumber object num1 = ComplexNumber(2, 3) # Call get_data() method # Output: 2+3j num1.get_data() # Create another ComplexNumber object # and create a new attribute 'attr' num2 = ComplexNumber(5) num2.attr = 10 # Output: (5, 0, 10) print((num2.real, num2.imag, num2.attr)) # but c1 object doesn't have attribute 'attr' # AttributeError: 'ComplexNumber' object has no attribute 'attr' print(num1.attr)

Çıktı

 2 + 3j (5, 0, 10) Geri izleme (en son çağrı): Dosya "", satır 27, baskıda (num1.attr) AttributeError: 'ComplexNumber' nesnesinin 'attr' niteliği yok

Yukarıdaki örnekte, karmaşık sayıları temsil edecek yeni bir sınıf tanımladık. __init__()Değişkenleri başlatmak (varsayılan olarak sıfırdır) ve get_data()sayıyı düzgün şekilde görüntülemek için iki işlevi vardır .

Yukarıdaki adımda dikkat edilmesi gereken ilginç bir şey, bir nesnenin niteliklerinin anında oluşturulabilmesidir. Num2 nesnesi için yeni bir öznitelik oluşturduk ve onu da okuduk. Ancak bu, num1 nesnesi için bu niteliği oluşturmaz.

Öznitelikleri ve Nesneleri Silme

Bir nesnenin herhangi bir niteliği, delifade kullanılarak herhangi bir zamanda silinebilir . Çıktıyı görmek için Python kabuğunda aşağıdakileri deneyin.

 >>> num1 = ComplexNumber(2,3) >>> del num1.imag >>> num1.get_data() Traceback (most recent call last):… AttributeError: 'ComplexNumber' object has no attribute 'imag' >>> del ComplexNumber.get_data >>> num1.get_data() Traceback (most recent call last):… AttributeError: 'ComplexNumber' object has no attribute 'get_data'

Del ifadesini kullanarak nesnenin kendisini bile silebiliriz.

 >>> c1 = ComplexNumber(1,3) >>> del c1 >>> c1 Traceback (most recent call last):… NameError: name 'c1' is not defined

Aslında bundan daha karmaşık. Bunu yaptığımızda c1 = ComplexNumber(1,3), bellekte yeni bir örnek nesne oluşturulur ve c1 adı ona bağlanır.

Komutta del c1, bu bağlama kaldırılır ve c1 adı ilgili ad alanından silinir. Ancak nesne bellekte var olmaya devam eder ve ona başka bir ad bağlı değilse, daha sonra otomatik olarak yok edilir.

Python'da referans verilmeyen nesnelerin bu otomatik olarak yok edilmesine çöp toplama da denir.

Python'da nesnelerin silinmesi ad bağlamayı kaldırır

Ilginç makaleler...