Hi,
I was playing with abc for the first time (never ever had any use for it). It
works nicely with methods and properties.
But is there also a way to enforce that class Concrete has an attribute 'foo'
of type 'list'? I could of course write a 'foo' property, but I was hoping
there was a direct way,
import sys
import abc
class Abstract(object):
__metaclass__ = abc.ABCMeta
@abc.abstractmethod
def __init__(self):
pass
@abc.abstractmethod
def __getitem__(self, key):
raise NotImplementedError("__getitem__ method required!")
@abc.abstractproperty
def encoding(self):
raise NotImplementedError("encoding property required!")
@abc.abstractproperty
def foo(self):
assert isinstance(self.foo, list)
class Concrete(Abstract):
def __init__(self):
self.foo = [] # it could be solved by making foo a property
def __getitem__(self, key):
pass
@property
def encoding(self):
return "some encoding"
c = Concrete()
Traceback (most recent call last):
File "C:\TEMP\abc_foo.py", line 46, in <module>
c = Concrete()
TypeError: Can't instantiate abstract class Concrete with abstract methods foo
Regards,
Albert-Jan
PS: Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)]
on win32
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
All right, but apart from the sanitation, the medicine, education, wine, public
order, irrigation, roads, a
fresh water system, and public health, what have the Romans ever done for us?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
_______________________________________________
Tutor maillist - [email protected]
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor