this post was submitted on 30 Nov 2024
60 points (80.0% liked)
Programmer Humor
19865 readers
34 users here now
Welcome to Programmer Humor!
This is a place where you can post jokes, memes, humor, etc. related to programming!
For sharing awful code theres also Programming Horror.
Rules
- Keep content in english
- No advertisements
- Posts must be related to programming or programmer topics
founded 2 years ago
MODERATORS
you are viewing a single comment's thread
view the rest of the comments
view the rest of the comments
Why do people think Python is ducktyped? The syntax is quite explicit, just because
x = 5.
is shorthand forx = float(5)
doesn't mean it's doing weird mutations. The closest would be maybe that something like:works (I think) but that's not exactly a wacky behaviour. It's not like it ever does the wrong behaviour of casting a float to an int which can erase meaningful data and cause unpredictable behaviour.
I mean you can (and often should!) give functions/methods type signatures ffs.
Because to a certain extent Python is duck typed. Python has no concept of interfaces, unless you count the
abc
module combined with manualisinstance()
checks, which I've never seen anyone do in production. In order to be passed to some function that expects a "file-like object", it just has to have methods namedread()
,seek()
, and possiblyisatty()
. The Python philosophy, at least as I see it, is "as long as it has methods namedwalk()
andquack()
, it's close enough to a duck for me to treat it as one".Duck typing is distinct from weak type systems, though.
Python has Interfaces in the form of protocols, but those are explicitly duck-typed
Yeah I guess I should think before I say shit.
You're right.
Thank you for acknowledging that. I'd also like to say for the record that you were literally one word off from being correct.
In my head I had conflated duck and weak typing. I'm not an oop programmer (tbh I'm not much of a programmer to begin with) and since what Python does e.g. with file handles is closer to say in Haskell making a wrapper
DataStream x -> FileHandle x
Where like implementing the read/write/open etc methods are equivalent to implementing the function mappings.
Which is very different from say JS "Herr durr I'm going to cast an int to a string and then error" I assumed the latter was "duck typing"
I don't know enough Haskell to tell you whether you're right about that or not (read: I know literally zero Haskell) but that sounds vaguely correct. That said, JavaScript is strongly and dynamically typed as well -- it's just a lot more lenient with implicit type conversions than Python is because of obscure 90s bullshit.
Also: don't let anyone tell you you're not a real programmer. If you even know what Haskell is, you've more than passed my bar.