2016-03-30 17 views
0

altında özel kullanım ve sınıfları ile ilgili python documentation kod örnek parçasıdır. Bunların her ikisini de anlamaya çalışıyorum ve arka planım Java'da, bu yüzden güçlü yazılan sınıflar ve değişkenler için kullanıyorum. Birisi burada neler olduğunu detaylı olarak açıklar mı?Python durumlar (Belgeleri Örnek)

class B: 
    pass 
class C(B): 
    pass 
class D(C): 
    pass 

for c in [B, C, D]: 
    try: 
     raise c() 
    except D: 
     print "D" 
    except C: 
     print "C" 
    except B: 
     print "B" 

İlk altı çizgi aslında B, C ve D örneklerini oluşturuyor veya yalnızca bir sınıf türü oluşturuyor mu? Onlar sadece sınıf türleriyse, bunların for c in [B, C, D]: içinde verildiğini farz ediyorum. C ve D sınıfları örneklenmeden nasıl örneklenebilir? Öyleyse istisna ile neler oluyor?

cevap

1

İlk altı satır, sınıf oluşturur. Onları daha sonra yaratılacak örneklerin tanımları olarak düşünmeyi seviyorum. for c in [B, C, D]: kullanmak, 'u hiçbirini başlatmaz; Sadece B, C her birine c ve hala sadece sınıfları vardır D atar. İlk iterasyon için c, B ile aynı şeydir. Bu nedenle, raise c() derken, c(), B'un bir örneğini oluşturur ve bunu bir istisna olarak kaldırır. Bu istisna except B: satırında yakalanır ve print "B" satırının yürütülmesine neden olur. Sonraki yineleme için c, [B, C, D]: C: C'da bir sonraki değere atanır. Şimdi, raise c(), C'un bir örneğini oluşturur ve bunu bir istisna olarak artırır. Bu istisna bloğunda yakalanır ve print "C" hattı çalıştırılır. Aynı şey D ile gerçekleşir.

1

ilk altı satır sınıfları tanımlar. Parametreler olmadan örneklendirilirler, örn. class C(B): sınıfı CB den değil C bu örneğinin bir argüman geçtikten gerektirir devralan anlamına gelir. Bu, documentation on classes'da açıklanmıştır.

döngü boyunca her zaman, tercüman verilen sınıfın bir hata yükseltecektir. B için B vb. Ile istisna sınıfı ne tür kaldırılırsa basılacaktır. Eğer bu kodu çalıştırdığınızda gördüğünüz gibi bu yetiştirildik istisna sınıfları bu sırayla, çünkü sen döngü iterated hangi üzerinde [B, C, D] görüldüğü gibi çıkış,,,, ardından B, C ardından D olduğunu.

0

İlk altı satır, sınıf türlerini oluşturuyor.

Python'daki her şey değişkene atanabileceğinden, bu işlevler, sınıfları (yalnızca o sınıfın örneklenmiş nesneleri değil) for c in [B, C, D]: yapıyor.

Son olarak, try: numaralı belgede ilk olarak istisnaların neler yapması gerektiği, bunun bir örneğini oluşturarak c türünün istisnasını yükseltmeye çalışır. Böylece ilk önce B tipi bir istisna artar, ardından C yazın ve sonra D yazın.

except s Her tür için bu istisnaları yakalamak üzere vardır. Python 2'de herhangi bir nesne bir istisna olarak kaldırılabilir, bu, yükseltilen tüm özel durumların BaseException

türünden türetilmesi gereken python 3'ten farklıdır.