Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

Convenient syntax for `setproperty!`

Abierto
#527 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
35/100
Tipo de issue
Nueva funcionalidad
Claridad
Bastante claro
Estado de actividad
Estancado
Stack tecnológico
julia, python
Área
api, backend

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

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de JuliaPy/pyjulia

Todos los issues de JuliaPy/pyjulia

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.