1# mode: run
2# ticket: 5
3
4class CyTest(object):
5    """
6    >>> cy = CyTest()
7    >>> '_CyTest__private' in dir(cy)
8    True
9    >>> cy._CyTest__private()
10    8
11    >>> '__private' in dir(cy)
12    False
13    >>> '_CyTest__x' in dir(cy)
14    True
15
16    >>> '__x' in dir(cy)
17    False
18    """
19    __x = 1
20    def __private(self): return 8
21
22    def get(self):
23        """
24        >>> CyTest().get()
25        (1, 1, 8)
26        """
27        return self._CyTest__x, self.__x, self.__private()
28
29    def get_inner(self):
30        """
31        >>> CyTest().get_inner()
32        (1, 1, 8)
33        """
34        def get(o):
35            return o._CyTest__x, o.__x, o.__private()
36        return get(self)
37
38class CyTestSub(CyTest):
39    """
40    >>> cy = CyTestSub()
41    >>> '_CyTestSub__private' in dir(cy)
42    True
43    >>> cy._CyTestSub__private()
44    9
45    >>> '_CyTest__private' in dir(cy)
46    True
47    >>> cy._CyTest__private()
48    8
49    >>> '__private' in dir(cy)
50    False
51
52    >>> '_CyTestSub__x' in dir(cy)
53    False
54    >>> '_CyTestSub__y' in dir(cy)
55    True
56    >>> '_CyTest__x' in dir(cy)
57    True
58    >>> '__x' in dir(cy)
59    False
60    """
61    __y = 2
62    def __private(self): return 9
63
64    def get(self):
65        """
66        >>> CyTestSub().get()
67        (1, 2, 2, 9)
68        """
69        return self._CyTest__x, self._CyTestSub__y, self.__y, self.__private()
70
71    def get_inner(self):
72        """
73        >>> CyTestSub().get_inner()
74        (1, 2, 2, 9)
75        """
76        def get(o):
77            return o._CyTest__x, o._CyTestSub__y, o.__y, o.__private()
78        return get(self)
79
80class _UnderscoreTest(object):
81    """
82    >>> ut = _UnderscoreTest()
83    >>> '__x' in dir(ut)
84    False
85    >>> '_UnderscoreTest__x' in dir(ut)
86    True
87    >>> ut._UnderscoreTest__x
88    1
89    >>> ut.get()
90    1
91    """
92    __x = 1
93
94    def get(self):
95        return self.__x
96