2009-12-03 17 views
10

से एक संपत्ति सेटर कैसे कहते हैं मैं अजगर कोड की निम्न हिस्सा है:मैं __init__

import hashlib 

class User: 
    def _set_password(self, value): 
     self._password = hashlib.sha1(value).hexdigest() 

    def _get_password(self): 
     return self._password 

    password = property(
     fset = _set_password, 
     fget = _get_password) 

    def __init__(self, user_name, password): 
     self.password = password 

u = User("bob", "password1") 
print(u.password) 

इस सिद्धांत में पासवर्ड की SHA1 प्रिंट आउट चाहिए तथापि self.password सेट करने से निर्माता पर ध्यान नहीं देता परिभाषित संपत्ति और केवल "पासवर्ड 1" मान सेट करता है। फिर "पासवर्ड 1" का मान प्रिंट स्टेटमेंट द्वारा पढ़ा जाता है।

मुझे पता है कि कक्षा के उदाहरण के विरुद्ध कक्षा पर परिभाषित पासवर्ड के लिए कुछ नीचे है, लेकिन मुझे यकीन नहीं है कि इसे सही तरीके से कैसे प्रस्तुत किया जाए, यह काम करता है। किसी भी सहायता की सराहना की जाएगी।

+0

आपके पास '_password' और' password' का उदाहरण क्यों है? –

+0

_password भंडारण क्षेत्र है। पासवर्ड संपत्ति एक्सेसर है। _password एक निजी क्षेत्र का तात्पर्य है। पासवर्ड सार्वजनिक प्रोटोकॉल है। –

उत्तर

14

एक संपत्ति एक वर्णक है, और वर्णनकर्ता केवल नए शैली के वर्गों पर काम करते हैं। प्रयास करें:

class User(object): ... 
बजाय

:

class User: ... 

वर्णनकर्ता के लिए एक अच्छा मार्गदर्शक here पाया जा सकता है।

+0

धन्यवाद - पूरी तरह से काम किया! –

+2

आपको पायथन 2.x का उपयोग करना होगा। पायथन 3 में सभी वर्ग डिफ़ॉल्ट रूप से नई शैली हैं। – AFoglia

+0

यह सही है - 2.6.4 –