On Thu, 30 Dec 2010 11:26:50 -0800, DevPlayer wrote: > There's some_object.some_method.func_defaults
Not quite -- method objects don't expose the function attributes directly. You need some_object.some_method.im_func to get the function object, which then has a func_defaults attribute. > and > some_function.func_defaults both are a settable attribute. How to set > the methods func_defaults? (1) You shouldn't mess with func_defaults unless you know what you're doing. (2) If you do know what you are doing, you probably won't want to mess with func_defaults. (3) But if you insist, then you would so the same way you would set any other object's attribute. >>> class C(object): ... def method(self, x=[]): ... print x ... >>> C().method() [] >>> function = inst.method.im_func >>> function.func_defaults ([],) >>> function.func_defaults = ("spam",) >>> inst.method() spam (4) Seriously, don't do this. > You'd have to have code in > _getattribute__(yourmethod) if not __getattr__(yourmethod) > > def __getattribute__(self, attr): > if attr == self.my_method: > # something like this, but i'm probably a little off > # you might need to use super or something to prevent > recursive __getattribute__ calls here > self.my_method.func_defaults = self.foo *cries* A much better solution would be: class MyClass: def my_method(self, x=None): if x is None: x = self.foo ... Don't write slow, confusing, complex, convoluted, self-modifying code when you can write fast, simple, straight-forward, obvious code. Unless you're doing it to win a bet. -- Steven -- http://mail.python.org/mailman/listinfo/python-list