<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>
<channel>
	<title>Comments on: ABCs</title>
	<atom:link href="http://4.flowsnake.org/archives/113/feed" rel="self" type="application/rss+xml" />
	<link>http://4.flowsnake.org/archives/113</link>
	<description>A Pythoneer's adventures with Chicken Scheme. ^_^ And more.</description>
	<pubDate>Tue, 06 Jan 2009 20:47:12 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.5</generator>
		<item>
		<title>By: Hans Nowak</title>
		<link>http://4.flowsnake.org/archives/113#comment-299</link>
		<dc:creator>Hans Nowak</dc:creator>
		<pubDate>Sat, 07 Jun 2008 12:40:13 +0000</pubDate>
		<guid isPermaLink="false">http://4.flowsnake.org/?p=113#comment-299</guid>
		<description>@Michael Campbell: That would indeed be great, but I doubt that it's ever going to happen, considering how vehemently the dev team defends str.join... But that would be a topic for another blog post. :-)</description>
		<content:encoded><![CDATA[<p>@Michael Campbell: That would indeed be great, but I doubt that it's ever going to happen, considering how vehemently the dev team defends str.join... But that would be a topic for another blog post. :-)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Michael Campbell</title>
		<link>http://4.flowsnake.org/archives/113#comment-298</link>
		<dc:creator>Michael Campbell</dc:creator>
		<pubDate>Sat, 07 Jun 2008 12:28:03 +0000</pubDate>
		<guid isPermaLink="false">http://4.flowsnake.org/?p=113#comment-298</guid>
		<description>I anxiously await the complete reversal of how "correct" string.join(list) is when an iterable ABC gets created with .join(string) on it.</description>
		<content:encoded><![CDATA[<p>I anxiously await the complete reversal of how "correct" string.join(list) is when an iterable ABC gets created with .join(string) on it.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: markus</title>
		<link>http://4.flowsnake.org/archives/113#comment-297</link>
		<dc:creator>markus</dc:creator>
		<pubDate>Sat, 07 Jun 2008 09:05:36 +0000</pubDate>
		<guid isPermaLink="false">http://4.flowsnake.org/?p=113#comment-297</guid>
		<description>Io is definitely worth an extra look.</description>
		<content:encoded><![CDATA[<p>Io is definitely worth an extra look.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: James</title>
		<link>http://4.flowsnake.org/archives/113#comment-296</link>
		<dc:creator>James</dc:creator>
		<pubDate>Sat, 07 Jun 2008 07:52:07 +0000</pubDate>
		<guid isPermaLink="false">http://4.flowsnake.org/?p=113#comment-296</guid>
		<description>The PEP says "The built-in list and bytes types derive from MutableSequence." MutableSequence is a subclass of Sequence. So list would derive from more than object in Py3k, which I think might remove your main objection?

It looks to me like ABCs are just a convenient way to bundle together a series of 'promises' that a class makes about what methods it offers, like Java's interfaces. Unlike Java interfaces (and more like Ruby's modules), you can also put default implementations in the ABC, too. What seems to be the major innovation over what can be done in Python now, is that builtins will be placed under these new hierarchies.</description>
		<content:encoded><![CDATA[<p>The PEP says "The built-in list and bytes types derive from MutableSequence." MutableSequence is a subclass of Sequence. So list would derive from more than object in Py3k, which I think might remove your main objection?</p>
<p>It looks to me like ABCs are just a convenient way to bundle together a series of 'promises' that a class makes about what methods it offers, like Java's interfaces. Unlike Java interfaces (and more like Ruby's modules), you can also put default implementations in the ABC, too. What seems to be the major innovation over what can be done in Python now, is that builtins will be placed under these new hierarchies.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Lennart Regebro</title>
		<link>http://4.flowsnake.org/archives/113#comment-295</link>
		<dc:creator>Lennart Regebro</dc:creator>
		<pubDate>Sat, 07 Jun 2008 05:42:41 +0000</pubDate>
		<guid isPermaLink="false">http://4.flowsnake.org/?p=113#comment-295</guid>
		<description>Well, ABC's that are not inherited from should have been called interfaces. As it is now, the ABCs in Python 3 kinda mix those concepts a bit. It may or may not be a problem, I don't know, but intuitively I would have liked a greater separation between the two. But that might be since I've used zope.interfaces for a couple of years now, and like it. :-)</description>
		<content:encoded><![CDATA[<p>Well, ABC's that are not inherited from should have been called interfaces. As it is now, the ABCs in Python 3 kinda mix those concepts a bit. It may or may not be a problem, I don't know, but intuitively I would have liked a greater separation between the two. But that might be since I've used zope.interfaces for a couple of years now, and like it. :-)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: manuelg</title>
		<link>http://4.flowsnake.org/archives/113#comment-294</link>
		<dc:creator>manuelg</dc:creator>
		<pubDate>Sat, 07 Jun 2008 05:22:00 +0000</pubDate>
		<guid isPermaLink="false">http://4.flowsnake.org/?p=113#comment-294</guid>
		<description>&#62; It would, however, be perfectly possible for an abstract base class to have valid, working methods, to be used by classes inheriting from Foo. ... Apparently this isn't the case any longer.

From the PEP

&#62; &#62; Unlike Java's abstract methods or C++'s pure abstract methods, abstract methods as defined here may have an implementation. This implementation can be called via the super mechanism from the class that overrides it. This could be useful as an end-point for a super-call in framework using cooperative multiple-inheritance

If something is "list" enough to be used productively as a "list" (but inheriting from "list" would just leave us with a dangling, unused empty list object), now we have a canonical way to announce to the world to treat our object as a "list", without the overhead of subjecting it to a battery of tests.

We are all consenting adults here, so why be forced to inherit from a concrete class, just to throw away the "concrete" part.  Abstract Base Classes are agreements among consenting adults.</description>
		<content:encoded><![CDATA[<p>&gt; It would, however, be perfectly possible for an abstract base class to have valid, working methods, to be used by classes inheriting from Foo. ... Apparently this isn't the case any longer.</p>
<p>From the PEP</p>
<p>&gt; &gt; Unlike Java's abstract methods or C++'s pure abstract methods, abstract methods as defined here may have an implementation. This implementation can be called via the super mechanism from the class that overrides it. This could be useful as an end-point for a super-call in framework using cooperative multiple-inheritance</p>
<p>If something is "list" enough to be used productively as a "list" (but inheriting from "list" would just leave us with a dangling, unused empty list object), now we have a canonical way to announce to the world to treat our object as a "list", without the overhead of subjecting it to a battery of tests.</p>
<p>We are all consenting adults here, so why be forced to inherit from a concrete class, just to throw away the "concrete" part.  Abstract Base Classes are agreements among consenting adults.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
