Quantcast
Channel: Python Hispano
Viewing all articles
Browse latest Browse all 180

python majibu: Problema con el decorador @property

$
0
0

Muy buenas! :D

estoy haciendo uso de ctypes para integrar parte de un proyecto a otro proyecto que esta completamente escrito en Python. El proyecto con el que estoy usando ctypes tiene una clase que no se ha de instanciar, tiene una serie de setters/getters que manipula ciertas propiedades de la clase. Así que en lugar de escribir 6 métodos para la clase, decidí escribir 6 métodos pero decorados con @property para acceder "directamente" a sus tres "propiedades", aquí el código:

 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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
importctypesimportloggingfromvectorimportVector3ffromlibsimport_audioclassListener:"""    Define la posición de escucha."""_audio.sfListener_setGlobalVolume.argtypes=[ctypes.c_float]_audio.sfListener_setPosition.argtypes=[Vector3f]_audio.sfListener_setDirection.argtypes=[Vector3f]_audio.sfListener_getGlobalVolume.restype=ctypes.c_float_audio.sfListener_getPosition.restype=Vector3f_audio.sfListener_getDirection.restype=Vector3fdef__init__(self):raiseUserWarning("No me instancies!")@propertydefglobalVolume(cls):"""        Retorna el volumen global."""return_audio.sfListener_getGlobalVolume()@globalVolume.setterdefglobalVolume(cls,volume):"""        Cambia el volumen global de todos los sonidos y la musica        el volumen es un numero entre 0 y 100; es combinado con el        volumen de cada sonido/canción. El volumen por defecto es        de 100 (el máximo)"""_audio.sfListener_setGlobalVolume(float(volume))@propertydefposition(cls):"""        Obtiene la posición actual del escucha en la escena."""return_audio.sfListener_getPosition()@position.setterdefposition(cls,position):"""        Define la posición del escucha en la escena.        La posición por defecto del escucha es (0, 0, 0)."""_audio.sfListener_setPostion(position)@propertydefdirection(cls):"""        Obtiene la orientación actual del escucha en la escena."""return_audio.sfListener_getDirection()@direction.setterdefdirection(cls,orentation):"""        Establece la orientación del escucha en la escena.        La orientación define los ejes 3D del escucha (izquierda, arriba, frente)        en la escena. El vector de la orientación no tiene que ser normalizado.        por defecto, la orientación del escucha es (0, 0, -1)."""_audio.sfListener_setDirection(orentation)

Y luego me pongo a jugar con el modulo en ipython, esto es lo que obtengo:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
1 >>> from listener import Listener2 >>> from vector import Vector3f3 >>> Listener.position3 <<< <property at 0x1cb7ba8>4 >>> Listener.position = Vector3f(0.0, 0.0, 1.0)5 >>> Listener.position5 <<< <Vector3f(0.0, 0.0)>6 >>> Listener.globalVolume6 <<< <property at 0x1cb7b50>7 >>> Listener.globalVolume = 100.08 >>> Listener.globalVolume8 <<< 100.09 >>> Listener.globalVolume9 <<< 100.010 >>>

Cómo ven, algo estoy haciendo mal. Si me pudieran orientar estaría super agradecido. Saludos!


Viewing all articles
Browse latest Browse all 180