duck typing assert‏

Steven D'Aprano steve+comp.lang.python at pearwood.info
Thu Nov 8 18:40:19 EST 2012


On Thu, 08 Nov 2012 15:39:24 -0500, Terry Reedy wrote:

[...]
> 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.

Properties and methods do not have the same interface:

IFoo.bar  # returns a computed property
Foo.bar()  # calls a method

Since the interfaces are different, duck-typing will fail. It will 
actually fail in a potentially nasty way:

x = Foo.bar  # doesn't raise an exception, gives the method object
# ... much later
do_something_with(x)  # blows up potentially far, far away




-- 
Steven



More information about the Python-list mailing list