1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| class metatuple(type):
'''metaclass permettant d'utiliser la clarté et la propreté syntaxique d'une classe
pour obtenir un tuple constitué de fonctions complexes (multi-lignes), ordonnées'''
def __new__(cls,nm,bs,at):
return tuple( (v for n,v in sorted(at.items()) if n[0]=='f' ]) )
class Vec(object):
def __init__(s,v):
s.val = v
s.type = s.id(v)
def id(s,v,totalGroups=3):
'''doit nous retourner un nombre nous renseignant a la fois sur le groupe du vecteur, ainsi que sur sa "polarite", lecture binaire'''
for x in range(totalGroups):
x,g = x*2,x
if (v[x]==v[x+1]) and (v[x] in (1,-1)):
return ( g << 1 ) + ( v[x]==1 )
raise Exception('Vector not identified')
def op(s,*args):
return s.ops[s.type](*args)
class ops(object):
__metaclass__=metatuple
def f0(): print 'group:0 neg'
def f1(): print 'group:0 pos'
def f2(): print 'group:1 neg'
def f3(): print 'group:1 pos'
def f4(): print 'group:2 neg'
def f5(): print 'group:2 pos'
#======================================
def main():
Vec([1,1,42,94,67,20]).op()
Vec([-1,-1,58,24,1,1]).op()
main() |
Partager