मैं पायथन के डेटा मॉडल में गहरी समझ पाने की कोशिश कर रहा हूं और मैं निम्नलिखित कोड को पूरी तरह से समझ नहीं पा रहा हूं:

>>> x = 1

>>> isinstance(x,int)
True

>>> isinstance(x,numbers.Integral)
True

>>> inspect.getmro(int)
(<type 'int'>, <type 'object'>)

>>> inspect.getmro(numbers.Integral)
(<class 'numbers.Integral'>, <class 'numbers.Rational'>, <class 'numbers.Real'>,
 <class 'numbers.Complex'>, <class 'numbers.Number'>, <type 'object'>)

उपरोक्त के आधार पर, ऐसा लगता है कि int और number.Integral समान पदानुक्रम में नहीं हैं।

पायथन संदर्भ से (2.6.6) मैं देख रहा हूँ

number.Integral - ये पूर्णांकों के गणितीय सेट (सकारात्मक और नकारात्मक) से तत्वों का प्रतिनिधित्व करते हैं।

int और numbers.Integral में क्या अंतर है? क्या इसका type int बनाम class numbers.Integral से कोई लेना-देना है, जो मुझे उपरोक्त आउटपुट में दिखाई दे रहा है?

19
ElenaT 20 नवम्बर 2011, 21:36

3 जवाब

सबसे बढ़िया उत्तर

numbers अमूर्त वर्गों के एक पदानुक्रम को परिभाषित करता है जो संख्यात्मक प्रकारों पर संभव संचालन को परिभाषित करता है। देखें PEP 3141int और Integral के बीच का अंतर यह है कि int एक ठोस प्रकार है जो Integral परिभाषित सभी कार्यों का समर्थन करता है।

10
Cat Plus Plus 20 नवम्बर 2011, 21:45
In [34]: numbers.Integral ?
Type:           ABCMeta
Base Class:     <class 'abc.ABCMeta'>
String Form:    <class 'numbers.Integral'>
Namespace:      Interactive
File:           c:\python26\lib\numbers.py
Docstring:
    Integral adds a conversion to long and the bit-string operations.


In [35]: int ?
Type:           type
Base Class:     <type 'type'>
String Form:    <type 'int'>
Namespace:      Python builtin
Docstring:
    int(x[, base]) -> integer


In [36]: type(int) == type (numbers.Integral)
Out[36]: False

In [39]: issubclass(int, numbers.Integral)
Out[39]: True

इंटीग्रल एक एब्सट्रैक्ट बेस क्लास है। int ABCMeta का एक उपवर्ग है Integral

3
joaquin 20 नवम्बर 2011, 23:49

मुझे दो चीज़ें जोड़ने की अनुमति दें:

isinstance(x,numbers.Integral)

long और . को भी कवर करता है

isinstance(x, int)

नहीं करता। numbers.Integral परीक्षण के करीब होगा

isinstance(x, (int, long))

पायथन 2 में (अजगर 3 ने अच्छे के लिए long को मार दिया।)

मैं numbers.Integral के साथ परीक्षण पसंद करता हूं, क्योंकि यदि आप int (या long) से प्राप्त करते हैं, तो isinstance(y, numbers.Integral) अभी भी True रहेगा।

4
Robert Siemer 17 अगस्त 2015, 19:42