मैं एक पायथन प्रोग्राम में थोड़ी सी विरासत का उपयोग करने की कोशिश कर रहा हूं जिस पर मैं काम कर रहा हूं। मेरे पास बेस क्लास, उपयोगकर्ता है, जो उपयोगकर्ता की सभी कार्यक्षमताओं को लागू करता है। मैं एक अनुमोदित उपयोगकर्ता की अवधारणा को जोड़ रहा हूं, जो कि एक विधि के अतिरिक्त, उपयोगकर्ता की तरह है।आप व्युत्पन्न कक्षा में एक उदाहरण कैसे डालते हैं?
उपयोगकर्ता श्रेणी में कुछ विधियां हैं जो उपयोगकर्ता ऑब्जेक्ट को वापस लाती हैं। जब मैं subclass करता हूं, यह काम नहीं करेगा, क्योंकि मैं एक अपरिवर्तनीय उपयोगकर्ता को एक उपयोगकर्ता को वापस कर दूंगा, जिससे मुझे अन्य तरीकों के साथ इस विधि को कॉल करने से रोक दिया जा सकेगा। हालांकि UnapprovedUser में get()
विधि एक UnapprovedUser वस्तु, न कि एक उपयोगकर्ता वापस जाने के लिए की जरूरत है
class User(object):
base_dn = 'ou=Users,dc=example,dc=org'
@classmethod
def get(cls, uid):
ldap_data = LdapUtil.get(uid + ',' + self.base_dn)
return User._from_ldap(ldap_data)
class UnapprovedUser(User):
base_dn = 'ou=UnapprovedUsers,dc=example,dc=org'
def approve(self):
new_dn = '' # the new DN
LdapUtil.move(self.dn, new_dn)
get()
और _from_ldap()
तरीकों, दोनों वर्गों के लिए ही हैं।
मैं उपयोगकर्ता के उन उदाहरणों में से एक कैसे डाल सकता हूं जो मुझे User.get()
से एक अनुमोदित उपयोगकर्ता में मिलता है?
class UnapprovedUser(User):
# continued from before
@classmethod
def get(cls, uid):
user = super(UnapprovedUser, cls).get(uid)
return (UnapprovedUser) user # invalid syntax
ताकि मैं माता पिता से विधि लपेट सकते हैं और बस सही वर्ग के लिए दिए गए मान डाली:
मैं की तरह कुछ करना चाहते हैं। फिर फिर, ऐसा करने से माता-पिता को उनके मूल्य का उपयोग self.base_dn
के लिए कर सकता है, जो सबकुछ तोड़ देगा।
बिल्कुल वही जो मैं खोज रहा था। धन्यवाद। मुझे लगता है मैंने कभी नहीं देखा कि आप क्लास पैरामीटर के साथ क्लास विधि में ऐसा कर सकते हैं। –