8 ms·
Interfaces and Protocols in Python
- rbanffy 6y agoIf you do this, I urge you to add lots of comments explaining what and why you are doing it. All this is relatively new and will be very confusing to the people reading your code.
- Recursing 6y agoActually, zope.interface has been around for 20 years. It just became almost abandoned like the rest of Zope with the era of Django/Flask (and the zope 3 debacle). Nowadays I think Twisted, Pyramid and Plone are the only "famous" projects left using it
- rbanffy 6y agozope.interface was never widely adopted.
- Recursing 6y agoThat is true, but I think there was a point in time (2000-2001?) where Zope was very much the dominant python web framework, and the Zope foundation employed many python core developers. It's even mentioned in the history of python https://docs.python.org/3/license.html https://docs.python.org/3/license.html
- rbanffy 6y agoZope was always a decade ahead of its time in the Python space and at least two in the general web framework space. When I had to explain it to clients I joked it suffered from “Martian Technology Syndrome”.
- btown 6y agoWhat was the Zope 3 debacle exactly? I have vague memories of something like that from back in the day, but having trouble finding anything concrete.
- Recursing 6y agoI honestly don't really know, and would also be curious to find out what happened exactly that made Zope almost disappear
- toolslive 6y agowell, it was more or less the same thing as the python3 debacle. Imagine having a big python2 project and all the cool stuff is happening in python3. You can't upgrade without substantial effort (code & testing). Now replace python2 with zope2 and python3 with zope3. You get the idea.
- runfalk 6y agoIt's also used by certbot, pyjwt, ckan, proxy.py, scrapy, etc. The list is pretty long but I do agree with you that the majority of packages neither use nor should use it. https://github.com/zopefoundation/Zope/network/dependents?dependent_type=PACKAGE https://github.com/zopefoundation/Zope/network/dependents?de...
- staticautomatic 6y agoI’d urge lots of comments if you’re using anything that might lead the reader in the direction of Twisted, which has the most impenetrable documentation of any Python library I’ve ever seen.
- ivirshup 6y agoThe O'Reilly book cover for Twisted is a tangled ball of snakes. This seemed like an accurate choice from its reputation.
- motoboi 6y agoI’m not trying to start a flame war, but I’m genuinely curious: if you want and need all this, why not use Java? Java has all the strong typing and static checking, all you need is to type a lot more words.
- icegreentea2 6y agoThe key would be that 'you sometimes want it'. The stuff that `zope.interface` gets you is honestly on the... heavy side of what I think makes sense for a lot of scenarios (especially in Python). Which would explain it's relatively low uptake despite having been around for like... 15-20 years?? I haven't used `typing.Protocol` yet (I am mostly still working in 3.7), but it seems to roughly capture the level of 'heaviness' that seems workable. I do get your gist though. Sometimes I wonder what I'm doing type annotating stuff.
- psd1 6y ago> I do get your gist though. Sometimes I wonder what I'm doing type annotating stuff. I have to say, I despise trying to decipher untyped functions. This arg is called "order" - do you want an instance of Order, an order ID, or a function for sorting? Fine, I'll read the docstring. Instead of using the IDE.
- BerislavLopac 6y ago> I haven't used `typing.Protocol` yet (I am mostly still working in 3.7) You can use it if you install the typing-extensions package: https://pypi.org/project/typing-extensions/ https://pypi.org/project/typing-extensions/
- high_density 6y agobecause most ML libraries are python-first... as for other stuff (web-servers, what not), I don't think python can beat kotlin / typescript / etc
- marcinzm 6y agoScripts where startup time matters. Situations where you don't want the heavy-weight and complex JVM. Cases where you need to interact with C/C++ code a lot (ML, etc.). Companies where python is the norm and introducing another language adds a lot of overhead.
- albertzeyer 6y agoIt's the first time I hear about Zope, and also zope.interface. How widely is this used? I personally would be hesitant to adopt something depending on some not-well-known library. Then on the other side, if sth like interfaces are missing in core Python, and typing.Protocol is not quite the same thing, maybe we should try to extend the core typing for sth like typing.Interface? Or maybe first to typing_extensions. Or, as I understood it, maybe we just need to fix ABCMeta (for MyPy), and then already have what we want? I'm also not quite sure I understood: Why do I need this base class zope.interface.Interface at all? Why not just implement IPlugin or whatever like it is mentioned there, but not deriving from Interface, and throw NotImplementedError in methods (tools like PyCharm then recognize this is an abstract method). And all concrete types/classes just explicitly need to derive from this IPlugin class. That's mostly what I anyway do already, and what I also see in other projects code. This approach seems to be fine. What's the problem with it?
- musingsole 6y agoPython interfaces are an obscure feature. Zope.interface is the the ancestor of Python interfaces. Which is to say, not widely.
- robohoe 6y agoAFAIK I’ve only seen Zenoss (monitoring software) use Zope widely. About the only place where I saw it.
- CraigJPerry 6y agoIt used to be very very popular, back around python 2.4 days was its peak i think. That was around 15 years ago roughly from memory.
- smoe 6y agoI was a bit surprised to see zope.interfaces pop up these days. If you are not using the entire Zope Component Architecture I'm not sure how useful it has been since Python 3. Zope and things build on top of it (Plone CMS e.g.) was fairly popular in the early-mid 2000s and was in my opinion ahead of it's time in many ways. But also overkill for most projects.
- mark_l_watson 6y agoThanks for writing that. I need to use Python fairly often, even though I self identify as a Lisp developer. I found the discussion of checking structure with Protocols very useful. I am going to update my current project.
- chartpath 6y agoOMG as a long-time Pyramid user I never thought I would see an article referring to the Zope Component Architecture on the front page of HN.
- TobySKT 6y agoWith the growing use of mobile devices, minimalism is on the rise. Minimalism brings additional benefits to apps and websites, in the shape of faster loading times and better compatibility between screen sizes. Beautiful minimalist apps combined with great usability are really impressive: an easily navigated, simple app is a very powerful form of communication. Read more what should you know to create a minimalist website https://steelkiwi.com/blog/best-practices-for-minimalist-website-design/ https://steelkiwi.com/blog/best-practices-for-minimalist-web...