Convenient syntax for `setproperty!`
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 35/100
Línea de trabajo
Comienza leyendo el manejo existente de getattr y el issue 11 de PyCall.jl al que se hace referencia; después, sigue cómo la asignación de atributos de Python llega a setproperty! de Julia. Reproduce el ejemplo con un MyStruct mutable y confirma que obj.x = 2 actualiza el valor y que obj.x imprime 2 sin un AttributeError.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
I couldn't find an earlier issue but this seems like something that would be a common issue, so please share if there's a related one.
Basically, I think the following code should work:
from julia import Main as jl
jl.eval("""
mutable struct MyStruct
x::Int
end
""")
obj = jl.MyStruct(1)
obj.x = 2
However, it gives the following error:
Traceback (most recent call last):
File "/Users/mcranmer/Documents/ManimAnimation/SR/setting_demo.py", line 10, in <module>
obj.x = 2
AttributeError: 'PyCall.jlwrap' object has no attribute 'x'
I couldn't completely figure out where __setattr__ should be overloaded, but I feel like it would be possible to enable this. For the record, __getattr__ seems to work fine; it's just __setattr__ that doesn't work.
As a temporary workaround, I am using the function:
from julia import Main as jl
jl.eval("""
import Base: setproperty!
setproperty!(obj, field::String, val) = setproperty!(obj, Symbol(field), val)
""")
set = jl.setproperty_b
jl.eval("""
mutable struct MyStruct
x::Int
end
""")
obj = jl.MyStruct(1)
set(obj, "x", 2)
print(obj.x)
# 2
But I think obj.x = 2 should do this automatically.
(needed to overload setproperty! - see https://github.com/JuliaPy/PyCall.jl/issues/11)
cc @mkitti @marius311 @stevengj
- Lenguaje dominante
- Python
- Estrellas
- 893
- Forks
- 101
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de JuliaPy/pyjulia
-
Dificultad 4/5 3-5 días Aptitud para principiantes 25/100
-
Dificultad 4/5 3-5 días Aptitud para principiantes 25/100
-
Dificultad 4/5 3-5 días Aptitud para principiantes 20/100
-
Dificultad 3/5 1-2 días Aptitud para principiantes 48/100
-
Kill existing Julia sessionAbierto
Dificultad 5/5 Más de una semana Aptitud para principiantes 25/100
Todos los issues de JuliaPy/pyjulia
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
btclib-org/btclib-ecc#404 ·
-
changelog investigate
Dificultad 1/5 Menos de una hora Aptitud para principiantes 78/100
ramnes/notion-sdk-py#430 ·
-
bug good first issue
Dificultad 1/5 Menos de una hora Aptitud para principiantes 91/100
hyeonjoong/debussy#56 ·
-
README устарел: статус проекта, версия 0.1.0 при описании тега v0.1.1, семантика фолбэка поискаAbiertodocumentation
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
Lagrunge82/yandex-mail-mcp#43 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
liberation-data/drivine-python#252 · 1 comentario ·
Los mantenedores suelen responder en 1 día