SORU
26 EYLÜL 2008, Cuma


aşırı yükleme __init__ python

Hadi üye listesi olan veri adında bir sınıf var diyelim.

Gerçek bir liste ile, örneğin, bir dosya adı veri listesi başlatılamadı (içeren) veya sınıf başlatmak için mümkün olmak istiyorum.

Bunun için tekniğin ne?

Sadece __class__ bakarak türünü kontrol ediyor musunuz?

Kaçırdığıma biraz hile var mı?

Bağımsız değişken Türüne göre aşırı kolay olduğu C alışığım.

Teşekkürler.

CEVAP
26 EYLÜL 2008, Cuma


'Alternatif' classmethods kullanmaktır. kurucular almak için çok daha güzel bir şekilde Örneğin:

>>> class MyData:
...     def __init__(self, data):
...         "Initialize MyData from a sequence"
...         self.data = data
...     
...     @classmethod
...     def fromfilename(cls, filename):
...         "Initialize MyData from a file"
...         data = open(filename).readlines()
...         return cls(data)
...     
...     @classmethod
...     def fromdict(cls, datadict):
...         "Initialize MyData from a dict's items"
...         return cls(datadict.items())
... 
>>> MyData([1, 2, 3]).data
[1, 2, 3]
>>> MyData.fromfilename("/tmp/foobar").data
['foo\n', 'bar\n', 'baz\n']
>>> MyData.fromdict({"spam": "ham"}).data
[('spam', 'ham')]

Kıvrımlara neden beklenen, hiç şüphe yok ki, arayanın sen veri ile ne yapmak istemiş sana ne verdiğini tahmin etmek zorunda değilsiniz. Sorun ile isinstance(x, basestring) olduğunu hiçbir şekilde arayan kişiye söyle, örneğin, o halde bu tür bir basestring gerekir tedavi olarak bir dize ve bir dizi.) Ve belki de arayan, farklı amaçlar için aynı tip kullanmak için, bazen öğeleri bir dizi olarak tek bir öğe olarak, bazen de ister. Açık tüm şüpheleri uzaklaştırır ve daha güçlü ve daha net kod yol açar.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • DudeFromUkraine

    DudeFromUkra

    7 Ocak 2008
  • HTC

    HTC

    12 Ocak 2006
  • Microsoft Research

    Microsoft Re

    24 EKİM 2008