S
Scott David Daniels
Here is a Mix-in class I just built for testing.
It is quite simple, but illustrates how Mixins
can be used.
class Pending(object):
_pending = iter(())
def __new__(class_, *args, **kwargs):
try:
return class_._pending.next()
except StopIteration:
return super(Pending, class_).__new__(class_,
*args, **kwargs)
Now for the use:
class Float(Pending, float): pass
Float._pending = iter(range(4,7))
print [Float(x*(x+1)//2) for x in range(6)]
Possibly by using itertools functions such as chain as in:
Klass._pending = itertools.chain(generate_some(), Klass._pending)
you can inject fixed values to simplify testing.
Or something like this:
class SomeTrickyClass(...): # new-style only (derived from object)
...
class Hacked(Pending, SomeTrickyClass):
_pending = sample_value_generator()
TempHold, SomeTrickyClass = SomeTrickyClass, Hacked
try:
<do the test>
finally:
SomeTrickyClass = TempHold
--Scott David Daniels
(e-mail address removed)
It is quite simple, but illustrates how Mixins
can be used.
class Pending(object):
_pending = iter(())
def __new__(class_, *args, **kwargs):
try:
return class_._pending.next()
except StopIteration:
return super(Pending, class_).__new__(class_,
*args, **kwargs)
Now for the use:
class Float(Pending, float): pass
Float._pending = iter(range(4,7))
print [Float(x*(x+1)//2) for x in range(6)]
Possibly by using itertools functions such as chain as in:
Klass._pending = itertools.chain(generate_some(), Klass._pending)
you can inject fixed values to simplify testing.
Or something like this:
class SomeTrickyClass(...): # new-style only (derived from object)
...
class Hacked(Pending, SomeTrickyClass):
_pending = sample_value_generator()
TempHold, SomeTrickyClass = SomeTrickyClass, Hacked
try:
<do the test>
finally:
SomeTrickyClass = TempHold
--Scott David Daniels
(e-mail address removed)