25 Mart 2009, ÇARŞAMBA
Python çoklu kurucular için temiz, pythonic bir yolu nedir?
Bunun için kesin bir cevap bulamıyorum. AFAIK, bir Python sınıfı __init__
birden fazla işlevi olabilir. Bu sorunu çözmek için iyi bir yol nedir?
number_of_holes
özelliği ile bir sınıf Cheese
aradım sanırım. Nasıl peynir-nesneleri oluşturmak için iki yol var
- böyle bir mağazada bir sayı alır:
parmesan = Cheese(num_holes = 15)
- ve herhangi bir argüman alır ve sadece
number_of_holes
özelliği rasgele bir:gouda = Cheese()
Bunu yapmak için tek bir yol düşünemiyorum, ama bu biraz hantal görünüyor:
class Cheese():
def __init__(self, num_holes = 0):
if (num_holes == 0):
# randomize number_of_holes
else:
number_of_holes = num_holes
Sen ne diyorsun? Daha iyi bir yolu var mı?
CEVAP
25 Mart 2009, ÇARŞAMBA
Aslında None
için daha hayırlıdır "" değerler: . magic
class Cheese():
def __init__(self, num_holes = None):
if(num_holes is None):
...
Eğer daha fazla parametre ekleyerek tam özgürlük istiyorsan:
class Cheese():
def __init__(self, *args, **kwargs):
#args -- tuple of anonymous arguments
#kwargs -- dictionary of named arguments
self.num_holes = kwargs.get('num_holes',random_holes())
Daha iyi *args
**kwargs
kavramı (aslında bu isimleri değiştirebilirsiniz) açıklamak için:
def f(*args, **kwargs):
print 'args: ', args, ' kwargs: ', kwargs
>>> f('a')
args: ('a',) kwargs: {}
>>> f(ar='a')
args: () kwargs: {'ar': 'a'}
>>> f(1,2,param=3)
args: (1, 2) kwargs: {'param': 3}
Bunu Paylaş:
Python unicode dizesi aksan kaldırmak ...
Python ile iç içe sözlükler uygulamak ...
Başka bir python betiği python betiği ...
Python 100.000 HTTP istekleri gönderme...
Python kullanarak SSH için en kolay yo...