-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathforprivate.py
More file actions
66 lines (49 loc) · 1.62 KB
/
Copy pathforprivate.py
File metadata and controls
66 lines (49 loc) · 1.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# -*- coding:utf-8-*-
"""
Python把以两个或以上下划线字符开头且没有以两个或以上下划线结尾的变量当作私有变量。
私有变量会在代码生成之前被转换为长格式(变为公有)。
转换机制是这样的:在变量前端插入类名,再在前端加入一个下划线字符。这就是所谓的私有变量轧压(Private name mangling)
"""
"""
类在初始化的时候,子类会首先调用自己的__init__()函数,
如果子类没有显式实现自己的__init__()函数,那么子类会调用父类的__init__()函数来初始化子类的对象,
如果子类定义了自己的__init__()函数,其将覆盖父类的__init__()
"""
class A():
def __init__(self):
self.__private()
self.public()
def __private(self):
print('A.__private()')
def public(self):
print('A.public()')
class B(A):
def __private(self):
print('B.__private()')
def public(self):
print('B.public()')
class C(A):
def __init__(self): # 重写__init__,不再调用self._A__private
self.__private() # 这里绑定的是_C_private
self.public()
def __private(self):
print('C.__private()')
def public(self):
print('C.public()')
class D():
def __init__(self):
self._D__private() # 调用一个没有定义的函数,Python会把它给我的 ^_^~
self.public()
def __private(self):
print('D.__private()')
def public(self):
print('D.public()')
b = B()
c = C()
d = D()
# A.__private()
# B.public()
# C.__private()
# C.public()
# D.__private()
# D.public()