+ -
当前位置:首页 → 问答吧 → 请问python里如何实现接口的选择性封装?

请问python里如何实现接口的选择性封装?

时间:2010-11-16

来源:互联网

第一个问题:
比如我在C++里会用这种方法来选择性地开放类接口:
  1. class Interface4SpecialUser
  2. {
  3.     friend class SpecialUser;
  4. private:
  5.     virtual void fun(void) =0;
  6. };

  7. class Imp : public Interface4SpecialUser
  8. {
  9. public:
  10.     void fun2() {}
  11. private:
  12.     virtual void fun(void) {}
  13. };
复制代码
这样除了Imp自己之外,只有SpecialUser可以调用Imp::fun,其他任何类(包括Imp的派生类)都无法调用它,也可以通过向Interface4SpecialUser中添加更多的friend class来选择性开放给更多的类。即使有hack方法能绕过这个封装机制至少也可以防止大多数的误用了。
那么在python里如何实现这种接口的选择性开放呢?(即把某个类的某些接口只开放给指定的类调用,并且被指定的类可以是完全独立的,没有继承方面的限制)

第二个问题:
  1. class Base :
  2.     def fun1( self ) :
  3.         pass
  4.     def fun2( self ) :
  5.         pass

  6. class Derived( Base ) :
  7.     pass
复制代码
假如我想在Derived里对Base.fun1封装一下,比如在每次调用它之前都会先调用外部的一个回调,那么我就不想让Derived的使用者能够直接调用Base.fun1(因为那样就绕过了Derived里的封装),这个封装该怎么实现呢?

先谢谢各位大牛……

作者: sjinny   发布时间: 2010-11-16

不知道楼主要的是不是 decorator?

作者: ncoder   发布时间: 2010-11-17