Python使我们能够通过在名称前加上双下划线来在类中创建"私有"方法和变量,如下所示:__myPrivateMethod().那么,如何解释这一点呢
>>> class MyClass:
...     def myPublicMethod(self):
...             print 'public method'
...     def __myPrivateMethod(self):
...             print 'this is private!!'
... 
>>> obj = MyClass()
>>> obj.myPublicMethod()
public method
>>> obj.__myPrivateMethod()
Traceback (most recent call last):
  File "", line 1, in 
AttributeError: MyClass instance has no attribute '__myPrivateMethod'
>>> dir(obj)
['_MyClass__myPrivateMethod', '__doc__', '__module__', 'myPublicMethod']
>>> obj._MyClass__myPrivateMethod()
this is private!!
这是怎么回事?!
我会对那些没有那么做的人解释一下.
>>> class MyClass:
...     def myPublicMethod(self):
...             print 'public method'
...     def __myPrivateMethod(self):
...             print 'this is private!!'
... 
>>> obj = MyClass()
我在那里做的是使用公共方法和私有方法创建一个类并实例化它.
接下来,我称之为公共方法.
>>> obj.myPublicMethod() …让我们考虑python(3.x)脚本:
main.py:
from test.team import team
from test.user import user
if __name__ == '__main__':
    u = user()
    t = team()
    u.setTeam(t)
    t.setLeader(u)
测试/ user.py:
from test.team import team
class user:
    def setTeam(self, t):
        if issubclass(t, team.__class__):
            self.team = t
测试/ team.py:
from test.user import user
class team:
    def setLeader(self, u):
        if issubclass(u, user.__class__):
            self.leader = u
现在,当然,我已经获得了循环导入和出色的ImportError.
所以,不是pythonista,我有三个问题.首先:
一世.我怎么能让这个东西工作?
并且,知道某人将不可避免地说"循环导入总是表明设计问题",第二个问题来自:
II.为什么这个设计不好?
最后,第三个:
III.什么是更好的选择?
确切地说,上面的类型检查只是一个例子,还有一个基于类的索引层,它允许ie.发现所有用户都是一个团队的成员(用户类有许多子类,因此索引加倍,对于一般用户和每个特定子类)或所有团队都将用户作为成员
编辑:
我希望更详细的例子能够澄清我试图实现的目标.为了可读性省略了文件(但是有一个300kb的源文件让我感到害怕,所以请假设每个类都在不同的文件中)
# ENTITY
class Entity:
    _id    = None
    _defs  = {}
    _data  = None
    def …