<txp:article status="sticky" limit=1 /> ->  Textpattern Warning: Die Werte für Attribute müssen in Hochkommata eingeschlossen werden  on line 916
textpattern/lib/txplib_misc.php:916 trigger_error()
textpattern/publish.php:1090 splat()
textpattern/publish.php:1012 processTags()
textpattern/publish.php:496 parse()
index.php:33 textpattern()
Peterpedia-Flash: PyPy erfindet nebenbei geile Syntax
Übersicht Peterpedia lesen What's up Peterpedia? Administration Suche

PyPy erfindet nebenbei geile Syntax · Apr 3, 12:48 von stargaming

Das PyPy 1.0 draußen ist, dürfte ja mittlerweise die Runde gemacht haben (Jacob Hallen zu PyPy).

Jedenfalls ist mir beim Durchstöbern der Bibliotheken dort etwas Spaßiges aufgefallen:

python:
  1. class __extend__(IrgendeineAndereKlasse):
  2.   def angehangeneMethode(self):
  3.     ...

Das Ganze geht zurück auf eine sehr schöne Metaklasse (die auf IrgendeineAndereKlasse angewendet werden muss):

python:
  1. """
  2.     class X:
  3.         __metaclass__ = extendabletype
  4.         ...
  5.  
  6.     # in some other file...
  7.     class __extend__(X):
  8.         ...      # and here you can add new methods and class attributes to X
  9. """
  10.  
  11. class extendabletype(type):
  12.     """A type with a syntax trick: 'class __extend__(t)' actually extends
  13.     the definition of 't' instead of creating a new subclass."""
  14.     def __new__(cls, name, bases, dict):
  15.         if name == '__extend__':
  16.             for cls in bases:
  17.                 for key, value in dict.items():
  18.                     if key == '__module__':
  19.                         continue
  20.                     setattr(cls, key, value)
  21.             return None
  22.         else:
  23.             return super(extendabletype, cls).__new__(cls, name, bases, dict)

Was es erlaubt, Klassen in anderen Dateien als der Deklarationsdatei zu “erweitern” (ja, es ginge auch über die Zuweisung Klasse.methode = ..., ist aber lange nicht so schön).

Speziell kommt das aus der Datei pypy/tool: pairtype.py.

Artikel bearbeiten