[Python-ideas] namedtuple baseclass

Eric V. Smith eric at trueblade.com
Sun Jan 12 02:27:39 CET 2014


See also http://bugs.python.org/issue7796 for a discussion of this issue. 

--
Eric.

> On Jan 11, 2014, at 8:05 PM, Steven D'Aprano <steve at pearwood.info> wrote:
> 
>> On Sat, Jan 11, 2014 at 06:04:06PM -0500, Yury Selivanov wrote:
>> Hello all,
>> 
>> I propose to add a baseclass for all namedtuples. Right now 'namedtuple'
>> function dynamically creates a class derived from 'tuple', which complicates
>> things like dynamic dispatch. Basically, the only way of checking if an
>> object
>> is an instance of 'namedtuple' is to do "isinstance(o, tuple) and
>> hasattr(o, '_fields')".
> 
> Let me see if I understand your use-case. You want to dynamically 
> dispatch on various objects. Given two objects:
> 
> p1 = (23, 42)
> p2 = namedtuple("pair", "a b")(23, 42)
> assert p1 == p2
> 
> 
> you want to dispatch p1 and p2 differently. Is that correct?
> 
> 
> Then, given a third object:
> 
> class Person(namedtuple("Person", "name sex age occupation id")):
>    def say_hello(self):
>        print("Hello %s" % self.name)
> 
> p3 = Person("Fred Smith", "M", 35, "nurse", 927056)
> 
> 
> you want to dispatch p2 and p3 the same. Is that correct?
> 
> If I am correct, I wonder what sort of code you are writing that wants 
> to treat p1 and p2 differently, and p2 and p3 the same. To me, this 
> seems ill-advised. Apart from tuple (and object), p2 and p3 should not 
> share a common base class, because they have nothing in common.
> 
> 
> [...]
>> This way, it's possible to simple write 'isinstance(o, namedtuple)'.
> 
> I am having difficulty thinking of circumstances where I would want to 
> do that. 
> 
> -1 on the idea.
> 
> 
> -- 
> Steven
> _______________________________________________
> Python-ideas mailing list
> Python-ideas at python.org
> https://mail.python.org/mailman/listinfo/python-ideas
> Code of Conduct: http://python.org/psf/codeofconduct/
> 


More information about the Python-ideas mailing list