के एक वर्ग विधि से एक उदाहरण विधि कॉल करने मैं एक वर्ग है इस प्रकार है:पायथन: कैसे एक ही कक्षा
class MyClass(object):
int = None
def __init__(self, *args, **kwargs):
for k, v in kwargs.iteritems():
setattr(self, k, v)
def get_params(self):
return {'int': random.randint(0, 10)}
@classmethod
def new(cls):
params = cls.get_params()
return cls(**params)
और मैं ऐसा करने में सक्षम होना चाहते हैं:
>>> obj = MyClass.new()
>>> obj.int # must be defined
9
मेरा मतलब है MyClass
का नया उदाहरण बनाये बिना, लेकिन जाहिर है कि यह आसान नहीं है, क्योंकि MyClass.new()
TypeError: unbound method get_params() must be called with MyClass instance as first argument (got nothing instead)
क्या ऐसा करने का कोई तरीका है? धन्यवाद
आप 'get_params' को क्लासमेथ भी क्यों नहीं बनाते? – BrenBarn
'MyClass' एक उदाहरण है,' get_params' एक विधि का प्रतिनिधित्व करता है जिसे व्यापक रूप से मेरी कक्षा में अन्य ** उदाहरण ** विधियों से बुलाया जाता है, और मुझे लगता है कि इसे सभी को बदलने के बजाए कक्षा के तरीके से कॉल करने का कोई तरीका होना चाहिए वे विधियां जो वर्तमान में इसे कॉल करती हैं। वैसे भी धन्यवाद :) – Gerard
'get_params' क्या करता है? यदि यह एक उदाहरण विधि है, तो आपको इसे कॉल करने के लिए एक उदाहरण होना चाहिए। यदि आप नहीं करते हैं, तो शायद यह एक उदाहरण विधि नहीं होनी चाहिए। आप किसी भी अन्य दायरे से एक इंस्टेंस विधि को कॉल कर सकते हैं, हालांकि, कक्षा को एक स्पष्ट प्रथम तर्क के रूप में प्रदान करके। –