पर देखा। Float
एस, Integer
एस और Rational
एस Number
के उप-वर्ग हैं। Zero
Integer
का उप-वर्ग है।
आप अपने वर्ग के mro
(विधि संकल्प क्रम) विधि को फोन करके एक वस्तु का पूरा वर्ग वंश का निरीक्षण कर सकते हैं:
In [34]: from sympy import S
In [38]: type(S.Zero).mro()
Out[38]:
[sympy.core.numbers.Zero,
sympy.core.numbers.IntegerConstant,
sympy.core.numbers.Integer, <-- Zero is a kind of Integer
sympy.core.numbers.Rational,
sympy.core.numbers.Number,
sympy.core.expr.AtomicExpr,
sympy.core.basic.Atom,
sympy.core.expr.Expr,
sympy.core.basic.Basic,
sympy.core.evalf.EvalfMixin,
object]
ये उपवर्गों "सिखाने" SymPy कैसे हेरफेर और भाव प्रतीकात्मक आसान बनाने के लिए। एक उदाहरण के रूप में, वाजिब वर्ग के उदाहरण negated this way हैं:
def __neg__(self):
return Rational(-self.p, self.q)
, कहने के लिए है, तो x
Rational
का एक उदाहरण है है, तो -x
का कारण बनता है x.__neg__()
कहा जाता है।
@staticmethod
def __neg__():
return S.Zero # the negation of Zero is still Zero
Zero
, One
और MinusOne
: इस बीच, Integer
वर्ग के उदाहरण, negated by
def __neg__(self):
return Integer(-self.p)
हैं और वस्तु, Zero
का एक उदाहरण विशेष रूप से, है, तो its negation है द्वारा परिभाषित किया गया _eval_power
विधि को भी लागू करें जो इन वस्तुओं को "सिखाता है" x
को एक शक्ति में कैसे बढ़ाया जाए (जहां x
है Zero
, One
या MinusOne
)। उदाहरण के लिए, Zero
raised to a positive expression ही बराबर है:
def _eval_power(self, expt):
if expt.is_positive:
return self
...
One
raised to anything ही बराबर है:
def _eval_power(self, expt):
return self
आप sympy.core.numbers
मॉड्यूल के लिए the source code अवलोकन हैं, तो आप करने के लिए जो प्रभाव में हैं परिभाषाओं की भार SymPy शिक्षण कैसे मिल जाएगा प्रतीकात्मक अंकगणित करें। यह गणित वर्ग में बच्चों को सिखाए जाने से बहुत अलग नहीं है, सिवाय इसके कि यह कंप्यूटर-ese में व्यक्त किया गया है।
आप सोच रहे होंगे कि प्रत्येक पूर्णांक के लिए एक विशेष कक्षा क्यों नहीं है। Integers
Zero
, One
और MinusOne
सामान्य Integer
कक्षा के उदाहरणों के रूप में माना जाता है। उनके नियम और गुणा के नियम और इतने पर रखा गया है।विपरीत Zero
, One
और MinusOne
जो जब मॉड्यूल लोड किया जाता है instantated कर रहे हैं, अन्य पूर्णांकों only as needed कैश नहीं किया जाता:
def __new__(cls, i):
...
try:
return _intcache[ival] # <-- return the cached Integer if seen before
except KeyError:
obj = Expr.__new__(cls) # <-- create a new Integer if ival not in _intcache
obj.p = ival
_intcache[ival] = obj
return obj
क्या बिल्ली तुम के लिए क्या किया 'int' के अलावा कुछ भी होने के लिए 'टाइप (1) 'प्राप्त करें? – user2357112
@ user2357112 बस आयातित सिम्पी मॉड्यूल –
आयात करना सिम्पी इस तरह के पार्सर के साथ पेंच नहीं करेगा। 'टाइप (1) 'हमेशा एक वास्तविक पायथन पूर्णांक का निर्माण करेगा और इसका प्रकार लेगा, जो' int' होगा। – user2357112