2017-09-03 49 views
5

Gereksinim duyulduğunda sembollere açıklama sağlayabilecek bir sembette işlevsellik ararım. Bu hepsi benim değişkenleri takip ve ben uğraşıyorum fiziksel ne miktarda bilmek beni sağlayacak, çünkü bu yararlı olacağınıSemptomlardaki sembollere açıklama eklemek mümkün mü?

>>> x = symbols('x') 
>>> x.description.set('Distance (m)') 
>>> t = symbols('t') 
>>> t.description.set('Time (s)') 
>>> x.description() 
'Distance (m)' 
>>> t.description() 
'Time (s)' 

çizgisinde bir şey olurdu. Semptomda bile böyle bir şey mümkün mü?

DÜZENLEME

Ben semboller için __doc__ nitelik değişmez olarak göründüğü için bu yinelenen olduğunu sanmıyorum.

>>> print(rhow.__doc__) 

    Assumptions: 
     commutative = True 

    You can override the default assumptions in the constructor: 

from sympy import symbols 
A,B = symbols('A,B', commutative = False) 
bool(A*B != B*A) 
    True 
bool(A*B*2 == 2*A*B) == True # multiplication by scalars is commutative 
    True 

>>> rhow.__doc__ = 'density of water' 
--------------------------------------------------------------------------- 
AttributeError       Traceback (most recent call last) 
<ipython-input-87-bfae705941d2> in <module>() 
----> 1 rhow.__doc__ = 'density of water' 

AttributeError: 'Symbol' object attribute '__doc__' is read-only 

Nitekim bir .__doc__ özellik var, ancak benim amaçlar için bunu değiştiremezsiniz: Aşağıdaki düşünün. Sadece okunur.

+0

Olası kopyalar [? Mathematica adlı "kullanım" işlevine eşdeğer var mı] (https://stackoverflow.com/questions/43715293/is-there-an-equivalent-to-mathematicas-usage-function) – Wrzlprmft

+0

Bunu takip etmek için ayrı bir sözlük kullanabilirsiniz. Örnek 'what_is = {}, what_is ['x'] = 'Mesafe (m)''. Bir sembol atadığınızda sözlüğünüzü ayarlamanızı hatırlamanız gerekir, ancak bu, sembolü bir açıklamaya atamanın hatırlanması ihtiyacına benzer. – Hannebambel

cevap

5

Sen Symbol sınıf miras ve buradaki gibi kendi özel mülkü ekleyebilir:

from sympy import Symbol, simplify 

# my custom class with description attribute 
class MySymbol(Symbol): 
    def __new__(self, name, description=''): 
     obj = Symbol.__new__(self, name) 
     obj.description = description 
     return obj 

# make new objects with description 
x = MySymbol('x') 
x.description = 'Distance (m)' 
t = MySymbol('t', 'Time (s)') 
print(x.description, t.description) 

# test 
expr = (x*t + 2*t)/t 
print (simplify(expr)) 

Çıktı:

Distance (m) Time (s) 
x + 2 
ait
+0

Bu çok güzel bir öneridir, ancak aslında bu tür bir öznitelikle birden çok sembolü bildirmek istiyorum. Asıl sorumumda 'Symbol' komutunu değil,' sembolleri() 'gösteriyorum. "Symbols()' komutuyla benzer bir şey yapmanın mümkün olup olmadığını sorunuz? – user32882

+0

Bu mümkün mü? tek seferde birden çok MySymbol işlevi bildiriliyor mu? – user32882

+0

'Semboller' işlevinin kaynak koduna bağlı olarak çoklu kayıt için kendi özel işlevinizi yapın. – Serenity