मेरे पास अगला कोड है:
class PythagoreanProof(Scene):
CONFIG={
"color_triangulos":YELLOW,
"color_rect_c":RED,
"color_rect_b":ORANGE,
"color_rect_a":ORANGE,
"color_cuadrado_c":ORANGE,
"opacidad_triangulos":0.6,
"opacidad_cuadradro_a":0.6,
"opacidad_cuadradro_b":0.6,
"opacidad_cuadradro_c":0.6,
"grosor_lineas":1,
"l_a":5/5,
"l_b":12/5,
"l_c":13/5,
}
def construct(self):
self.wait()
self.pre_cuadrado()
self.pos_cuadrado()
self.tran_pre_pos_cuadrado()
self.wait()
def pre_cuadrado(self):
cuadro=Square(side_length=self.l_a+self.l_b)
जैसा कि आप देख सकते हैं, मैं "l_a" कुंजी को self.l_a
के माध्यम से एक्सेस कर सकता हूं
लेकिन इस बहुत आसान कोड में मुझे निम्न त्रुटि मिलती है:
class Example():
CONFIG = {'spam':25}
def __init__(self, value):
self.data = value
def display(self):
print(self.data, self.spam)
x=Example(2)
x.display()
AttributeError: 'Example' object has no attribute 'spam'
यह पहले उदाहरण में क्यों काम करता है? यह वास्तव में कैसे काम करता है?
धन्यवाद!
2 जवाब
जब Scene
को PythagoreanProof
वर्ग में विरासत में मिला है तो क्यों काम करता है, आपको यह देखने के लिए Scene
के कोड पर एक नज़र डालने की आवश्यकता है कि यह वास्तव में क्या कर रहा है।
कक्षा Example
में आपने CONFIG
को एक वर्ग स्तरीय वस्तु के रूप में परिभाषित किया है। आपकी विधि display
को इस ऑब्जेक्ट को self.CONFIG
के साथ इंगित करना होगा और फिर '25' का मान प्राप्त करने के लिए कुंजी 'स्पैम' का उपयोग करना होगा।
CONFIG विशेषताओं में कुंजी बनाने के लिए आप @poperty
आवरण का उपयोग कर सकते हैं।
नीचे उदाहरण देखें
class Example():
CONFIG = {'spam': 25}
def __init__(self, value):
self.data = value
def display(self):
print(self.data, self.CONFIG['spam'])
@property
def spam(self):
return self.CONFIG['spam']
x = Example(2)
x.display()
print(x.spam)
2 25
25
ध्यान दें कि आप में से कुछ पहचानकर्ता गलत हैं। विधि display
__init__
के तहत एक फ़ंक्शन नहीं होना चाहिए, लेकिन कक्षा Example
के अंतर्गत एक विधि होनी चाहिए।
मुझे संदेह है कि Scene
वर्ग में कुछ जादू है जो __getattr__
विधि के साथ खेलता है। इस कदर :
class Scene:
# Minimalistic example.
# See https://docs.python.org/3.8/reference/datamodel.html#object.__getattr__
def __getattr__(self, name):
return self.CONFIG[name]
class Example(Scene):
CONFIG = {'spam': 25}
def __init__(self, value):
self.data = value
def display(self):
print(self.data, self.spam)
x = Example(2)
x.display()
# -> 2 25
संबंधित सवाल
नए सवाल
python
पायथन एक बहु-प्रतिमान है, गतिशील रूप से टाइप किया हुआ, बहुउद्देशीय प्रोग्रामिंग भाषा है। यह एक साफ और एक समान वाक्यविन्यास सीखने, समझने और उपयोग करने के लिए त्वरित होने के लिए डिज़ाइन किया गया है। कृपया ध्यान दें कि अजगर 2 आधिकारिक तौर पर 01-01-2020 के समर्थन से बाहर है। फिर भी, संस्करण-विशिष्ट पायथन सवालों के लिए, [अजगर -२.०] या [अजगर -३.x] टैग जोड़ें। पायथन वेरिएंट (जैसे, ज्योथन, PyPy) या लाइब्रेरी (उदा।, पांडस और न्यूमपी) का उपयोग करते समय, कृपया इसे टैग में शामिल करें।
Scene
वर्ग में कुछ ऐसा होना चाहिए जो इसेself.XXX
सेself.CONFIG[XXX]
में अनुवाद करे, आपकी दूसरी कक्षाScene
से विरासत में नहीं मिली है, इसलिए यह ऐसा नहीं करती है।class PythagoreanProof(Scene):
आपको एक न्यूनतम प्रतिलिपि प्रस्तुत करने योग्य उदाहरण प्रदान करना होगा या , फिर से, केवल अटकलें लगाई जा सकती हैं और यह सूत्रबद्ध विषय पर नहीं है।