SORU
23 Mart 2009, PAZARTESİ


' ____ yeni s kullanın ve ____init Python?

Sadece dersine girdiğim bir düzene koymaya çalışıyorum ve işlevsellik aynı tarzda sıklet tasarım deseni olarak bazı girmiştik.

Ancak, bir bit __init__ __new__ sonra aradı neden olarak kafam karıştı. Böyle bir şey beklemiyordum. Herkes bu neden oluyor ve ben bu işlevi yoksa hayata nasıl söyleyebilir? (oldukça hacky hisseden __new__ içine uygulama koymak dışında).

İşte size bir örnek:

class A(object):
    _dict = dict()

    def __new__(cls):
    	if 'key' in A._dict:
    		print "EXISTS"
    		return A._dict['key']
    	else:
    		print "NEW"
    		return super(A, cls).__new__(cls)

    def __init__(self):
    	print "INIT"
    	A._dict['key'] = self
    	print ""

a1 = A()
a2 = A()
a3 = A()

Çıkışlar:

NEW
INIT

EXISTS
INIT

EXISTS
INIT

Neden?

CEVAP
23 Mart 2009, PAZARTESİ


Kullanın__yeni__kontrol etmek istediğinizde yeni bir örneğini oluşturma. Kullanın ____ inityeni bir örneğini başlatma kontrol etmek istediğinizde.

__yeni__örnek oluşturma ilk adımdır. İlk deniyor. bir yeni dönen sorumlu sınıf örneği. Buna karşılık, ____ initbir şey; başlatma için tek sorumlu var dönmek yok sonra örnek yaratılmıştır.

Genel olarak, gerek yok geçersiz kılar__yeni__değilsen değişmez bir tip gibi sınıflara str, int, unicode ve tavşan.

Kimden: http://mail.python.org/pipermail/tutor/2008-April/061426.html

Yapmaya çalıştığınız şey genellikle Factory ile yapıldığını düşünmeniz gerekir ve bunu yapmanın en iyi yolu budur. Kullanarak__yeni__iyi temiz bir çözüm değildir lütfen bir fabrika kullanımını düşünün. Burada a good factory example var.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • hytchme

    hytchme

    9 Mart 2014
  • SaraBeautyCorner - Nails and Nail Art Designs, DIY, Fashion & Makeup Tutorial

    SaraBeautyCo

    7 EKİM 2012
  • STITCHLESS TV how to sew your own style tutorials

    STITCHLESS T

    9 HAZİRAN 2011