Python sketches are not Pythonic
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 5/5
- Tempo estimado
- Mais de uma semana
- Facilidade para iniciantes
- 38/100
- Tipo de issue
- Funcionalidade
- Clareza
- Razoavelmente clara
- Status de atividade
- Pouca atividade
- Stack de tecnologia
- python
- Domínio
- developer-experience
Direção de pesquisa
Comece lendo o exemplo vinculado Basics/Structure/Redraw/Redraw.py e o libprocessing issue #150 referenciado. Compare o ciclo de vida atual do sketch com a abordagem proposta baseada em classes e, em seguida, esclareça quais alterações de API estão no escopo e como um exemplo atualizado demonstraria a conclusão.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
Sorry for the vague title, feel free to update it.
Using https://github.com/processing/processing-examples-mewnala/blob/6e416d80852ee9e147b70ae93cbf8f6dda871ba3/Basics/Structure/Redraw/Redraw.py as an example, a mewnala sketch structure and common techniques has several issues that makes it less ideal as Python code:
- Sharing state between frames requires the use of
global - Even when wildcard import is removed, some variables are injected at the runtime and linters catch them as "undefined":
setupfunction is not meaningful, the same results can be achieved just without. Usingsetupto initialize variables etc. causes even more undefined issues because how scopes work in Python.
As an alternative, a class based approach can solve all these issues:
from mewnala import (
Line,
Sketch as BaseSketch,
)
class Sketch(BaseSketch):
def __init__(self, width=640, height=480):
super().__init__()
self.width = width
self.height = height
def setup(self):
self.size = (self.width, self.height)
self.stroke = 255
self.loop = False
self.y = 180
def draw(self):
self.background = 0
self.y -= 4
if self.y < 0:
self.y = self.height
line = Line(0, self.y, self.width, self.y)
line.draw()
def mouse_pressed(self):
self.redraw()
if __name__ == "__main__":
sketch = Sketch(width=1920, height=1080)
sketch.run()
No more magic imports, no more undefined variables, and now the sketch has a Python-native syntax feel much more natural comparing to the previous version.
I removed the setter function calls too, it's a Java-native pattern and feels weird with Python.
We can go one step further and eliminate the setup() What does it do for the sketch can be covered by __init__ in a class context.
- Linguagem predominante
- Rust
- Estrelas
- 69
- Forks
- 14
- Merge médio
- 15d 22h
- PRs com merge (30d)
- 3
Guia de contribuição
Nenhum guia de contribuição indexado para este repositório
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de processing/libprocessing
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 82/100
processing/libprocessing#233 ·
-
Dropping Python 3.10 support Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
processing/libprocessing#229 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 62/100
processing/libprocessing#201 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 65/100
processing/libprocessing#194 ·
-
documentation
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
processing/libprocessing#146 · 1 comentário ·
Todas as issues de processing/libprocessing
Issues semelhantes
-
todo:perf
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 84/100
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 88/100
-
ACP agents get no MCP servers when the thread is created before the project's first worktree loads Abertastate:needs triage
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 88/100
zed-industries/zed#64611 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 74/100
ontola/atomic-server#1625 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 88/100
objectionary/phie#154 ·