Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #52046

Re: Newbie: static typing?

From Rotwang <sg552@hotmail.co.uk>
Newsgroups comp.lang.python
Subject Re: Newbie: static typing?
Date 2013-08-06 15:25 +0100
Organization A noiseless patient Spider
Message-ID <ktr0k6$rl$1@dont-email.me> (permalink)
References <ktp2jh$3a3$1@dont-email.me> <mailman.223.1375749359.1251.python-list@python.org> <ktqdkq$v3k$1@dont-email.me> <mailman.232.1375780843.1251.python-list@python.org> <ktqhhb$hu5$1@dont-email.me>

Show all headers | View raw


On 06/08/2013 11:07, Rui Maciel wrote:
> Joshua Landau wrote:
>
>> Unless you have a very good reason, don't do this [i.e. checking
>> arguments for type at runtime and raising TypeError]. It's a damn pain
>> when functions won't accept my custom types with equivalent
>> functionality -- Python's a duck-typed language and it should behave
>> like one.
>
> In that case what's the pythonic way to deal with standard cases like this
> one?
>
> <code>
> class SomeModel(object):
>          def __init__(self):
>                  self.label = "this is a label attribute"
>
>          def accept(self, visitor):
>                  visitor.visit(self)
>                  print("visited: ", self.label)
>
>
> class AbstractVisitor(object):
>          def visit(self, element):
>                  pass
>
>
> class ConcreteVisitorA(AbstractVisitor):
>          def visit(self, element):
>                  element.label = "ConcreteVisitorA operated on this model"
>
> class ConcreteVisitorB(AbstractVisitor):
>          def visit(self, element):
>                  element.label = "ConcreteVisitorB operated on this model"
>
>
> model = SomeModel()
>
> operatorA = ConcreteVisitorA()
>
> model.accept(operatorA)
>
> operatorB = ConcreteVisitorB()
>
> model.accept(operatorA)
>
> not_a_valid_type = "foo"
>
> model.accept(not_a_valid_type)
> </python>

The Pythonic way to deal with it is exactly how you deal with it above. 
When the script attempts to call model.accept(not_a_valid_type) an 
exception is raised, and the exception's traceback will tell you exactly 
what the problem was (namely that not_a_valid_type does not have a 
method called "visit"). In what way would runtime type-checking be any 
better than this? There's an obvious way in which it would be worse, 
namely that it would prevent the user from passing a custom object to 
SomeModel.accept() that has a visit() method but is not one of the types 
for which you thought to check.

Back to comp.lang.python | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

Newbie: static typing? Rui Maciel <rui.maciel@gmail.com> - 2013-08-05 21:46 +0100
  Re: Newbie: static typing? Gary Herron <gary.herron@islandtraining.com> - 2013-08-05 14:07 -0700
    Re: Newbie: static typing? Rui Maciel <rui.maciel@gmail.com> - 2013-08-06 10:05 +0100
      Re: Newbie: static typing? Steven D'Aprano <steve@pearwood.info> - 2013-08-06 09:26 +0000
      Re: Newbie: static typing? Joshua Landau <joshua@landau.ws> - 2013-08-06 10:29 +0100
        Re: Newbie: static typing? Rui Maciel <rui.maciel@gmail.com> - 2013-08-06 11:12 +0100
          Re: Newbie: static typing? Burak Arslan <burak.arslan@arskom.com.tr> - 2013-08-06 16:27 +0300
          Re: Newbie: static typing? Antoon Pardon <antoon.pardon@rece.vub.ac.be> - 2013-08-06 15:57 +0200
          Re: Newbie: static typing? Chris Angelico <rosuav@gmail.com> - 2013-08-06 15:06 +0100
          Re: Newbie: static typing? "Eric S. Johansson" <esj@harvee.org> - 2013-08-06 09:58 -0400
          Re: Newbie: static typing? Chris Angelico <rosuav@gmail.com> - 2013-08-06 15:38 +0100
      Easier to Ask Forgiveness than Permission (was: Newbie: static typing?) Ben Finney <ben+python@benfinney.id.au> - 2013-08-07 08:23 +1000
  Re: Newbie: static typing? Ian Kelly <ian.g.kelly@gmail.com> - 2013-08-05 17:38 -0600
  Re: Newbie: static typing? Ben Finney <ben+python@benfinney.id.au> - 2013-08-06 10:35 +1000
    Re: Newbie: static typing? Rui Maciel <rui.maciel@gmail.com> - 2013-08-06 10:01 +0100
      Re: Newbie: static typing? Joshua Landau <joshua@landau.ws> - 2013-08-06 10:19 +0100
        Re: Newbie: static typing? Rui Maciel <rui.maciel@gmail.com> - 2013-08-06 11:07 +0100
          Re: Newbie: static typing? Rotwang <sg552@hotmail.co.uk> - 2013-08-06 15:25 +0100
          Re: Newbie: static typing? Ben Finney <ben+python@benfinney.id.au> - 2013-08-07 08:34 +1000
      Re: Newbie: static typing? Chris Angelico <rosuav@gmail.com> - 2013-08-06 10:29 +0100
        Re: Newbie: static typing? Rui Maciel <rui.maciel@gmail.com> - 2013-08-06 11:28 +0100
          Re: Newbie: static typing? Chris Angelico <rosuav@gmail.com> - 2013-08-06 11:50 +0100
          Re: Newbie: static typing? Dennis Lee Bieber <wlfraed@ix.netcom.com> - 2013-08-06 18:54 -0400
          Re: Newbie: static typing? Terry Reedy <tjreedy@udel.edu> - 2013-08-06 19:02 -0400
          Re: Newbie: static typing? Chris Angelico <rosuav@gmail.com> - 2013-08-07 01:16 +0100
          RE: Newbie: static typing? "Prasad, Ramit" <ramit.prasad@jpmorgan.com.dmarc.invalid> - 2013-08-08 16:46 +0000
  Re: Newbie: static typing? Steven D'Aprano <steve@pearwood.info> - 2013-08-06 05:21 +0000
    Re: Newbie: static typing? Rui Maciel <rui.maciel@gmail.com> - 2013-08-06 10:04 +0100
  Re: Newbie: static typing? Grant Edwards <invalid@invalid.invalid> - 2013-08-06 15:05 +0000

csiph-web