Re: [Pyobjc-dev] [ pyobjc-Bugs-1146224 ] varadic class methods don't work
Brought to you by:
ronaldoussoren
From: Ronald O. <ron...@ma...> - 2005-02-22 19:28:57
|
On 22-feb-05, at 14:01, SourceForge.net wrote: > Bugs item #1146224, was opened at 2005-02-22 13:01 > Message generated for change (Tracker Item Submitted) made by Item > Submitter > You can respond by visiting: > https://sourceforge.net/tracker/? > func=detail&atid=114534&aid=1146224&group_id=14534 > > Category: None > Group: None > Status: Open > Resolution: None > Priority: 5 > Submitted By: Michael Hudson (mwh) > Assigned to: Nobody/Anonymous (nobody) > Summary: varadic class methods don't work > > Initial Comment: > Try running the following code (also attached): > > import traceback > from Foundation import NSObject > > class C(NSObject): > def f(self, *args): > print self, args > def g(cls, *args): > print cls, args > g = classmethod(g) > > try: > C.alloc().init().f(1,2,3) > except: > traceback.print_exc() > else: > print "instance method OK" > > try: > C.g(1,2,3) > except: > traceback.print_exc() > else: > print "class method OK" > > print 'f', type(C.__dict__['f']) > print 'g', type(C.__dict__['g']) > > With current svn I get: > > <C: 0x365950> (1, 2, 3) > instance method OK > Traceback (most recent call last): > File "/Users/mwh/f.py", line 19, in ? > C.g(1,2,3) > TypeError: Need 0 arguments, got 3 > f <type 'objc.python_selector'> > g <type 'objc.native_selector'> > > I suspect it's the python_selector/native_selector thing that's > causing the problem. I did try and look through the source to see > why it's happening but I just got very confused. My comment for revesion 1510 says: Due to the way PyObjC is implemented you cannot use varargs function (either *args or **kwds) as methods. If you try to you'll get unexpected behaviour. This patch makes using *args or **kwds on objc-methods illegal. Fixing the issues would be preferable, but is a lot of work. The traceback is now: Traceback (most recent call last): File "t.py", line 4, in ? class C(NSObject): TypeError: Using function with *args as an objc-method That's also not very useful behaviour, but at least you get the error message a lot sooner :-) Ronald |