Use decorators.

This commit is contained in:
Guido van Rossum 2005-01-16 00:16:11 +00:00
parent 9ba3684ecc
commit 75b64e65f1
3 changed files with 8 additions and 15 deletions

View File

@ -9,6 +9,7 @@ class EiffelBaseMetaClass(type):
return super(EiffelBaseMetaClass, meta).__new__(meta, name, bases, return super(EiffelBaseMetaClass, meta).__new__(meta, name, bases,
dict) dict)
@classmethod
def convert_methods(cls, dict): def convert_methods(cls, dict):
"""Replace functions in dict with EiffelMethod wrappers. """Replace functions in dict with EiffelMethod wrappers.
@ -30,11 +31,10 @@ class EiffelBaseMetaClass(type):
if pre or post: if pre or post:
dict[k] = cls.make_eiffel_method(dict[m], pre, post) dict[k] = cls.make_eiffel_method(dict[m], pre, post)
convert_methods = classmethod(convert_methods)
class EiffelMetaClass1(EiffelBaseMetaClass): class EiffelMetaClass1(EiffelBaseMetaClass):
# an implementation of the "eiffel" meta class that uses nested functions # an implementation of the "eiffel" meta class that uses nested functions
@staticmethod
def make_eiffel_method(func, pre, post): def make_eiffel_method(func, pre, post):
def method(self, *args, **kwargs): def method(self, *args, **kwargs):
if pre: if pre:
@ -49,8 +49,6 @@ class EiffelMetaClass1(EiffelBaseMetaClass):
return method return method
make_eiffel_method = staticmethod(make_eiffel_method)
class EiffelMethodWrapper: class EiffelMethodWrapper:
def __init__(self, inst, descr): def __init__(self, inst, descr):

View File

@ -63,12 +63,12 @@ class UserDict:
return self.data.popitem() return self.data.popitem()
def __contains__(self, key): def __contains__(self, key):
return key in self.data return key in self.data
@classmethod
def fromkeys(cls, iterable, value=None): def fromkeys(cls, iterable, value=None):
d = cls() d = cls()
for key in iterable: for key in iterable:
d[key] = value d[key] = value
return d return d
fromkeys = classmethod(fromkeys)
class IterableUserDict(UserDict): class IterableUserDict(UserDict):
def __iter__(self): def __iter__(self):

View File

@ -656,6 +656,7 @@ class TarInfo(object):
def __repr__(self): def __repr__(self):
return "<%s %r at %#x>" % (self.__class__.__name__,self.name,id(self)) return "<%s %r at %#x>" % (self.__class__.__name__,self.name,id(self))
@classmethod
def frombuf(cls, buf): def frombuf(cls, buf):
"""Construct a TarInfo object from a 512 byte string buffer. """Construct a TarInfo object from a 512 byte string buffer.
""" """
@ -699,8 +700,6 @@ class TarInfo(object):
tarinfo.name += "/" tarinfo.name += "/"
return tarinfo return tarinfo
frombuf = classmethod(frombuf)
def tobuf(self): def tobuf(self):
"""Return a tar header block as a 512 byte string. """Return a tar header block as a 512 byte string.
""" """
@ -858,6 +857,7 @@ class TarFile(object):
# the super-constructor. A sub-constructor is registered and made available # the super-constructor. A sub-constructor is registered and made available
# by adding it to the mapping in OPEN_METH. # by adding it to the mapping in OPEN_METH.
@classmethod
def open(cls, name=None, mode="r", fileobj=None, bufsize=20*512): def open(cls, name=None, mode="r", fileobj=None, bufsize=20*512):
"""Open a tar archive for reading, writing or appending. Return """Open a tar archive for reading, writing or appending. Return
an appropriate TarFile class. an appropriate TarFile class.
@ -923,8 +923,7 @@ class TarFile(object):
raise ValueError, "undiscernible mode" raise ValueError, "undiscernible mode"
open = classmethod(open) @classmethod
def taropen(cls, name, mode="r", fileobj=None): def taropen(cls, name, mode="r", fileobj=None):
"""Open uncompressed tar archive name for reading or writing. """Open uncompressed tar archive name for reading or writing.
""" """
@ -932,8 +931,7 @@ class TarFile(object):
raise ValueError, "mode must be 'r', 'a' or 'w'" raise ValueError, "mode must be 'r', 'a' or 'w'"
return cls(name, mode, fileobj) return cls(name, mode, fileobj)
taropen = classmethod(taropen) @classmethod
def gzopen(cls, name, mode="r", fileobj=None, compresslevel=9): def gzopen(cls, name, mode="r", fileobj=None, compresslevel=9):
"""Open gzip compressed tar archive name for reading or writing. """Open gzip compressed tar archive name for reading or writing.
Appending is not allowed. Appending is not allowed.
@ -970,8 +968,7 @@ class TarFile(object):
t._extfileobj = False t._extfileobj = False
return t return t
gzopen = classmethod(gzopen) @classmethod
def bz2open(cls, name, mode="r", fileobj=None, compresslevel=9): def bz2open(cls, name, mode="r", fileobj=None, compresslevel=9):
"""Open bzip2 compressed tar archive name for reading or writing. """Open bzip2 compressed tar archive name for reading or writing.
Appending is not allowed. Appending is not allowed.
@ -1002,8 +999,6 @@ class TarFile(object):
t._extfileobj = False t._extfileobj = False
return t return t
bz2open = classmethod(bz2open)
# All *open() methods are registered here. # All *open() methods are registered here.
OPEN_METH = { OPEN_METH = {
"tar": "taropen", # uncompressed tar "tar": "taropen", # uncompressed tar