Preventing direct access to a class

Daniel Klein danielk at aracnet.com
Sun Feb 4 16:56:07 EST 2001


On 04 Feb 2001 18:16:25 +0000, Michael Hudson <mwh21 at cam.ac.uk> wrote:

>You won't be able to do this completely.  You can make it sufficiently
>hard that people won't do it by mistake, which is good enough for most
>folk (it is for me).
>
>Here's one way:
>
>-------------------------------
>class A:
> pass
>
>class B:
> def foo(self,A=A):
>  return A()
>
>del A
>-------------------------------
>
>the class A is still there:
>
>>>> B.foo.im_func.func_defaults 
>(<class __main__.A at 0x8195024>,)
>
>but I think you can rely on people not doing
>
>>>> B.foo.im_func.func_defaults[0]()
>
>accidentally <wink>.

Sneaky!

I actually resolved my own problem by shifting some of the responsibility of
B() back over to A() (where it belongs), so I don't have the problem anymore.
But thanks for the idea, I'll keep it on tap.

Dan



More information about the Python-list mailing list