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
'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.
Python fonksiyon aşırı yükleme...
() Anlayış Python süper __init__() yön...
Fonksiyon Javascript - en İyi uygulama...
çınlama hata: bilinmeyen argüman: ...
Nasıl C köşeli operatör aşırı yükleme ...