हां, अगर तर्कों की आपूर्ति करने का कोई "अच्छा" तरीका नहीं है।
उदाहरण के लिए, अपने ORM वर्गों का उपयोग करना आप का उल्लेख है, शायद इसे और अधिक Python'y अनुमति देने के लिए किया जाएगा ..
col = Varchar()
col.index = True
col.length = 255
से .. ..rather
col = Varchar(index = True, length = 255)
ठीक है कि नहीं है सबसे अच्छा उदाहरण, क्योंकि **kwargs
विधि वास्तव में अच्छा होगा .. लेकिन मेरा मुद्दा यह है कि आपको कभी-कभी **kwargs
जैसे कभी-हतोत्साहित चीजों का उपयोग करने से पहले कुछ हासिल करने के वैकल्पिक तरीकों पर विचार करना चाहिए ..
ध्यान में रखने की एक और बात आप इस तरह के उपयोगकर्ता गलत कीवर्ड आर्ग है, जो चारों ओर की तरह काम किया जा सकता है की आपूर्ति करता है, तो एक लेखन त्रुटि को ऊपर उठाने के रूप में व्यवहार एक उपयोगकर्ता की उम्मीद है, खो सकता है ..
def __init__(self, **kwargs):
valid_kwargs = ['x', 'y', 'z']
for k, v in kwargs.iteritems():
if k not in valid_kwargs:
raise TypeError("Invalid keyword argument %s" % k)
setattr(self, k, v)
को एक अंतिम बात विचार करें:
class Hmm:
def __init__(self, **kwargs):
for k, v in kwargs.iteritems():
setattr(self, k, v)
def mymethod(self):
print "mymethod should print this message.."
x = Hmm(mymethod = None)
x.mymethod() # raises TypeError: 'NoneType' object is not callable
यह प्रश्न में संस्करण से छोटा है लेकिन ध्यान रखें कि यह गुणों (या अन्य वर्णनकर्ता) गुणों के लिए काम नहीं करेगा। –
मुझे ऐसा करने की सलाह नहीं है। कभी-कभी कुछ त्रुटि मिलती है। जब '__dict__' बिल्टिन विशेषता अद्यतन करें। –