duck typing assert‏

Terry Reedy tjreedy at udel.edu
Thu Nov 8 15:39:24 EST 2012


On 11/8/2012 12:34 PM, Andriy Kornatskyy wrote:
>> People who come from strongly typed languages that offer interfaces
> often are confused by lack of one in Python. Python, being dynamic
> typing programming language, follows duck typing principal. It can as
> simple as this:
>> assert looks(Foo).like(IFoo)
>> The post below shows how programmer can assert duck typing between
> two Python classes:
>> http://mindref.blogspot.com/2012/11/python-duck-typing-assert.html
>> Comments or suggestions are welcome.

 From the post:
'''
So far so good. Let fix it and take a look at properties:
from wheezy.core.introspection import looks
class IFoo(object):
 def foo(self, a, b=None):
 pass
 @property
 def bar(self):
 pass
class Foo(object):
 def foo(self, a, b=None):
 pass
 def bar(self):
 pass
assert looks(Foo).like(IFoo)
Here is output:
test.py:21: UserWarning: 'bar': is not property.
 assert looks(Foo).like(IFoo)
Traceback (most recent call last):
 File "test.py", line 21, in
 assert looks(Foo).like(IFoo)
AssertionError
'''
I view this check as an error. Properties are intended to be transparent 
to the user. One use of properties is to make something that is not a 
Mallard act like a Mallard. So this check breaks duck typing.
-- 
Terry Jan Reedy


More information about the Python-list mailing list

AltStyle によって変換されたページ (->オリジナル) /