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

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to