[Python-Dev] Explorations on new-style classes (original) (raw)
Kevin Jacobs jacobs@penguin.theopalgroup.com
Wed, 6 Mar 2002 09:47:06 -0500 (EST)
- Previous message: [Python-Dev] Explorations on new-style classes
- Next message: [Python-Dev] Explorations on new-style classes
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info.
--416156269-1032046193-1015426026=:8532 Content-Type: TEXT/PLAIN; charset=US-ASCII
On Tue, 5 Mar 2002, David Abrahams wrote:
Although I understand the appeal, using slots to constrain the attributes might be misguided (depending on your goals):
How about something even more misguided? I've implemented a metaclass that works around the problem of layout conflicts. e.g.:
class A(object): metaclass = LazySlotBuilder slots = 'a'
class B(object): metaclass = LazySlotBuilder slots = 'b'
class C(B): slots = 'c'
class AB(A,B): slots = ['ab']
class ABC(A,B,C,AB): slots = ['abc']
abc=ABC() print type(abc).slots
['a', 'c', 'b', 'ab', 'abc']
An implementation of LazySlotBuilder metaclass is attached. It works by creating 2 types instead of 1 if slots are present. The first class is an abstract version of the desired class with no slots declared in itself or its base classes. A concrete version is then built that inherits from the abstract version, adding only the slot definitions and a reference to the abstract class.
The current version has one significant limitation: it requires that all base classes with slots have the LazySlotBuilder metaclass. This can be worked around, but makes the implementation needlessly complex.
I'm very much interested in what people think about these ideas about using (or mis-using) slots, metaclasses, new-style classes, and other cutting-edge Python features. I am intentionally trying to push the limits and take things beyond what some of these features were originally intended to do. It is my hope that such examples will educate, spur discussion and help determine exactly which behaviors are intentional and supported, and which are implementation artifacts that should not be taunted lightly.
I am also aware that a sizeable fraction of python-dev may not care much about this topic, so I would not be offended if the consensus was that this discussion is not topical enough for the list. In that case, I would be happy to move it elsewhere, maybe to its own mailing list. Just keep in mind that these features are potentially the most confusing and powerful language extensions that Python has ever had, and that people (like myself) are currently writing code that is beginning to make full use of them. There are a lot of dusty corners to explore, and it is important for the principal Python developers to be aware of and to deal with any gremlins hiding in them.
It would also be nice if some of the examples I'm working on could eventually become part of the official Python test suite. If for no other reason, because the current set of tests is somewhat sparse.
Regards, -Kevin
-- Kevin Jacobs The OPAL Group - Enterprise Systems Architect Voice: (216) 986-0710 x 19 E-mail: jacobs@theopalgroup.com Fax: (216) 986-0714 WWW: http://www.theopalgroup.com
--416156269-1032046193-1015426026=:8532 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="bluesmoke.py" Content-Transfer-Encoding: BASE64 Content-ID: <Pine.LNX.4.44.0203060947060.8532@penguin.theopalgroup.com> Content-Description: Content-Disposition: attachment; filename="bluesmoke.py"
JycnDQpGaWxlOiAgICAgICAgICBibHVlc21va2UucHkNCg0KQXV0aG9yOiAg ICAgICAgS2V2aW4gSmFjb2JzIChqYWNvYnNAdGhlb3BhbGdyb3VwLmNvbSkN Cg0KQ3JlYXRlZDogICAgICAgTWFyY2ggNiwgMjAwMg0KDQpQdXJwb3NlOiAg ICAgICBJbXBsZW1lbnRzIGluc2FuZSBtZXRhY2xhc3MgdHJpY2tzIGluIFB5 dGhvbg0KDQpDb21wYXRpYmlsaXR5OiBQeXRob24gMi4yDQoNClJlcXVpcmVz OiAgICAgIA0KDQpSZXZpc2lvbjogICAgICAkSWQ6ICQNCicnJw0KDQpjbGFz cyBMYXp5U2xvdEJ1aWxkZXIodHlwZSk6DQogIGRlZiBfX25ld19fKGNscywg bmFtZSwgYmFzZXMsIGNsc19kaWN0KToNCiAgICB2aXNpdGVkID0ge30NCiAg ICBzbG90cyAgID0ge30NCiAgICBuZXdfYmFzZXMgPSBbXQ0KDQogICAgZm9y IGJhc2UgaW4gYmFzZXM6DQogICAgICAjIEdyYWIgYWJzdHJhY3QgdmVyc2lv bnMgb2YgYWxsIG9mIG91ciBiYXNlcy4gIFRoaXMgY3VycmVudGx5IGFzc3Vt ZXMgdGhhdA0KICAgICAgIyBhbGwgY2xhc3NlcyB3aXRoIHNsb3RzIGhhdmUg dGhlIExhenlTbG90QnVpbGRlciBtZXRhY2xhc3MuICBJdCB3b3VsZCBub3QN CiAgICAgICMgYmUgZGlmZmljdWx0IHRvIHJlbGF4IHRoaXMgYXNzdW1wdGlv bi4NCiAgICAgIG5ld19iYXNlcy5hcHBlbmQoYmFzZS5fX2RpY3RfXy5nZXQo J19fYWJzdHJhY3RfdHlwZScsYmFzZSkpDQoNCiAgICAgICMgQ29sbGVjdCBh bGwgc2xvdHMgZnJvbSBiYXNlIGNsYXNzZXMgYXNzdW1pbmcgdGhhdCBfX3Ns b3RzX18gaGFzIG5vdA0KICAgICAgIyBiZWVuIG1vZGlmaWVkIHNpbmNlIG9i amVjdCBjcmVhdGlvbi4gIEJldHRlciB3YXlzIG9mIGRvaW5nIHRoaXMgYXJl DQogICAgICAjIGNlcnRhaW5seSBwb3NzaWJsZS4NCiAgICAgIGZvciBiIGlu IGJhc2UubXJvKCk6DQogICAgICAgIGlmIGIgaW4gdmlzaXRlZDoNCiAgICAg ICAgICBjb250aW51ZQ0KICAgICAgICB2aXNpdGVkW2JdPTENCiAgICAgICAg Zm9yIHNsb3QgaW4gZ2V0YXR0cihiLCdfX3Nsb3RzX18nLFtdKToNCiAgICAg ICAgICBzbG90c1tzbG90XSA9IDENCg0KICAgICMgQ29sbGVjdCB0aGUgc2xv dHMgZGVjbGFyZWQgaW4gdGhlIGNsYXNzIHRvIGJlIGNyZWF0ZWQNCiAgICBp ZiAnX19zbG90c19fJyBpbiBjbHNfZGljdDoNCiAgICAgIGZvciBzbG90IGlu IGNsc19kaWN0WydfX3Nsb3RzX18nXToNCiAgICAgICAgc2xvdHNbc2xvdF0g PSAxDQoNCiAgICAjIElmIG5vIHNsb3RzIHdlcmUgZm91bmQsIHRoZW4gYnVp bGQgdGhlIG5vcm1hbCBib3JpbmcgY2xhc3MNCiAgICBpZiBub3Qgc2xvdHM6 DQogICAgICByZXR1cm4gc3VwZXIoTGF6eVNsb3RCdWlsZGVyLGNscykuX19u ZXdfXyhjbHMsIG5hbWUsIGJhc2VzLCBjbHNfZGljdCkNCg0KICAgICMgSWYg d2UgaGF2ZSBhbnkgc2xvdHMsIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSBo YXZlIHRvIG1ha2UgYWJzdHJhY3QgYW5kIGNvbmNyZXRlIGNsYXNzZXMNCiAg ICAjIEdldCByaWQgb2Ygc2xvdCBkZWNsYXJhdGlvbnMgdG8gcHJlcGFyZSB0 aGUgYWJzdHJhY3QgY2xhc3MgDQogICAgaWYgJ19fc2xvdHNfXycgaW4gY2xz X2RpY3Q6DQogICAgICBkZWwgY2xzX2RpY3RbJ19fc2xvdHNfXyddDQoNCiAg ICAjIHJlLXR1cGxlLWl6ZSB0aGUgYmFzZXMsIHNpbmNlIHR5cGUoKSB3YW50 cyB0aGVtIHRoYXQgd2F5DQogICAgbmV3X2Jhc2VzID0gdHVwbGUobmV3X2Jh c2VzKQ0KDQogICAgIyBCdWlsZCB0aGUgYWJzdHJhY3QgdHlwZQ0KICAgIGFi c3RyYWN0X3R5cGUgPSBzdXBlcihMYXp5U2xvdEJ1aWxkZXIsY2xzKS5fX25l d19fKGNscywgJ2Fic3RyYWN0JytuYW1lLCBuZXdfYmFzZXMsIGNsc19kaWN0 KQ0KDQogICAgIyBCdWlsZCB0aGUgY29uY3JldGUgdHlwZSBvbiB0b3Agb2Yg dGhlIGFic3RyYWN0DQogICAgY2xzX2RpY3QgPSB7fQ0KICAgIGNsc19kaWN0 WydfX3Nsb3RzX18nXSA9IHNsb3RzLmtleXMoKQ0KICAgIGNsc19kaWN0Wydf X2Fic3RyYWN0X3R5cGUnXSA9IGFic3RyYWN0X3R5cGUNCg0KICAgICMgQnVp bGQgYW5kIHJldHVybiB0aGUgbmV3IGNvbmNyZXRlIHR5cGUNCiAgICByZXR1 cm4gc3VwZXIoTGF6eVNsb3RCdWlsZGVyLGNscykuX19uZXdfXyhjbHMsIG5h bWUsIChhYnN0cmFjdF90eXBlLCksIGNsc19kaWN0KQ0KDQoNCmRlZiB0ZXN0 X0xhenlTbG90QnVpbGRlcigpOg0KICBjbGFzcyBCYXNlKG9iamVjdCk6DQog ICAgX19tZXRhY2xhc3NfXyA9IExhenlTbG90QnVpbGRlcg0KDQogIGNsYXNz IEEoQmFzZSk6DQogICAgX19zbG90c19fID0gJ2EnDQoNCiAgY2xhc3MgQihC YXNlKToNCiAgICBfX3Nsb3RzX18gPSAnYicNCg0KICBjbGFzcyBDKEIpOg0K ICAgIF9fc2xvdHNfXyA9ICdjJw0KDQogIGNsYXNzIEFCKEEsQik6DQogICAg X19zbG90c19fID0gWydhYiddDQoNCiAgY2xhc3MgQUJDKEEsQixDLEFCKToN CiAgICBfX3Nsb3RzX18gPSBbJ2FiYyddDQoNCiAgYWJjPUFCQygpDQogIHBy aW50IHR5cGUoYWJjKS5fX3Nsb3RzX18NCg0KaWYgX19uYW1lX18gPT0gJ19f bWFpbl9fJzoNCiAgdGVzdF9MYXp5U2xvdEJ1aWxkZXIoKQ0K --416156269-1032046193-1015426026=:8532--
- Previous message: [Python-Dev] Explorations on new-style classes
- Next message: [Python-Dev] Explorations on new-style classes
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]