this post was submitted on 04 Nov 2024
110 points (96.6% liked)

Programmer Humor

32571 readers
131 users here now

Post funny things about programming here! (Or just rant about your favourite programming language.)

Rules:

founded 5 years ago
MODERATORS
 
you are viewing a single comment's thread
view the rest of the comments
[–] TheDoctor@hexbear.net 10 points 3 weeks ago (2 children)

I helped a friend debug a script last week that was working inconsistently in really weird ways. I looked at the script and it was all event hooks littered with sleep calls. I told him he was basically fuzz testing his own script and then getting surprised when he found race conditions. Shit was wild. Also, sometimes getters in Python are a mistake.

[–] yogthos@lemmy.ml 7 points 3 weeks ago (1 children)

I find setters/getters are generally an antipattern because they obfuscate behavior. When you access a field you know what it looks like, but if you pass it through some implicit transformation in a getter then you have to know what that was.

[–] TheDoctor@hexbear.net 5 points 3 weeks ago (1 children)

Yeah. I can understand the use case when it’s something relating to keeping simple state in sync by replacing it with derived state. But this particular case was flushing a cache after each get, which made each get of the property non-deterministic based on the class’s state.

[–] yogthos@lemmy.ml 6 points 3 weeks ago

lol yeah that sounds like a nightmare

[–] jollyrogue@lemmy.ml 4 points 3 weeks ago (1 children)

Aren’t setters and getters discouraged in Python?

I remember reading something like, “This isn’t C++ , and Python doesn’t have private vars. Just set the var directly.”

[–] TheDoctor@hexbear.net 2 points 3 weeks ago

In the way that’s common in languages like Java where you’re making a property read-only, yes. But there’s a whole protocol in Python called descriptors where you can override the . on a field. The most common form of these is class methods annotated with the @property annotation, which makes it so the method can be accessed as if it were a property.