在整个sympy代码库中,导入样式混杂在一起。实际上,自上一发行版以来,此设置已被更改,因此在sympy master上运行示例可以得到:
<class 'sympy.core.symbol.Symbol'>
['Add','AlgebraicNumber','Atom','AtomicExpr','Basic','Catalan','Derivative','Dict','Dummy','E','Eq','Equality','EulerGamma','Expr','Float','Function','FunctionClass','Ge','GoldenRatio','GreaterThan','Gt','I','Integer','Lambda','Le','LessThan','Lt','Mod','Mul','N','Ne','Number','NumberSymbol','PoleError','Pow','PrecisionExhausted','Rational','RealNumber','Rel','S','StrictGreaterThan','StrictLessThan','Subs','Symbol','SympifyError','TribonacciConstant','Tuple','Unequality','UnevaluatedExpr','Wild','WildFunction','__all__','__builtins__','__cached__','__doc__','__file__','__loader__','__name__','__package__','__path__','__spec__','add','alphabets','arity','assumptions','basic','cache','cacheit','comp','compatibility','containers','core','coreerrors','count_ops','decorators','diff','evalf','evaluate','expand','expand_complex','expand_func','expand_log','expand_mul','expand_multinomial','expand_power_base','expand_power_exp','expand_trig','expr','exprtools','factor_nc','factor_terms','facts','function','gcd_terms','igcd','ilcm','integer_log','integer_nthroot','logic','mod','mod_inverse','mul','multidimensional','nan','nfloat','numbers','oo','operations','parameters','pi','power','preorder_traversal','prod','relational','rules','seterr','singleton','symbol','symbols','sympify','var','vectorize','zoo']
['AtomicExpr','Boolean','StdFactKB','_assume_defined','_filter_assumptions','_range','_re','_symbol','_uniquely_named_symbol','cartes','disambiguate','division','fuzzy_bool','is_sequence','ordered','print_function','random','sift','string','var']
造成混淆的原因是(在sympy 1.5.1中):
-
sympy/__init__.py
做from sympy.core import *
-
sympy/core/__init__.py
未定义__all__
- 核心程序包有一个名为
core
(sympy.core.core
)的子模块。
因此,当您在1.5.1中执行sympy.core
时,您实际上是从sympy.core.core
获得sympy/core/core.py
模块的,而在master上它正确地给出了sympy.core
软件包。
获取模块的更直接方法是
>>> import sympy as sym
>>> b = sym.Symbol('b')
>>> b.__module__
'sympy.core.symbol'
>>> import sys
>>> sys.modules[b.__module__]
<module 'sympy.core.symbol' from 'sympy/core/symbol.py'>```
如果我想看看里面有什么,我只会打开sympy/core/symbol.py
。
对于探索继承树,您可能会发现mro
有用:
>>> type(b).mro()
[<class 'sympy.core.symbol.Symbol'>,<class 'sympy.core.expr.AtomicExpr'>,<class 'sympy.core.basic.Atom'>,<class 'sympy.core.expr.Expr'>,<class 'sympy.logic.boolalg.Boolean'>,<class 'sympy.core.basic.Basic'>,<class 'sympy.core.evalf.EvalfMixin'>,<class 'object'>]