Loading

python下划线(_)含义

 

序号(后面举例用) 类型 举例 作用说明
1 前单下划线 _var

★★

 命名约定为私有属性、方法,但不会强制执行(报错),只是作为提示.

 经常用于property语法中.

2 后单下划线 var_

 避免与关键字冲突,又让变量名具有可读性.

 举例:加入想用type = "ok" ,但type是关键字,这时候就用type_ = "ok",增加了变量但可读性,又不与关键字冲突.

3 双前下划线 __var

★★★

 双下划线的变量、方法不能直接被实例调用(网上很多把这当私有化使用)

 用来避免子类覆盖其内容(如果不理解,请看下面的示例代码).

4 双前和双后下划线 __var__

★★★

 1. 这是python的魔法,不要去调用这些变量和方法.

 举例:__init__  __len__  __new__,调用方式 len(var) 

 2. 或者你重写这些内置方法(如果不理解,请看下面的示例代码).

 建议: 尽量避免用此方法命名自己的变量和方法,免得和将来python的内置方法冲突.

5 单下划线 _

 临时变量,接收值后抛弃(功能和go的单下划线一样).

 

序号3的示例代码:

 1 # 序号3的代码示例
 2 # 此时类A 和 类B 都写了__method方法,但因为用了双下划线,虽然B重写了方法,但没有生效。这就是双下划线的作用;
 3 class A(object):
 4     def __method(self):
 5         print("I'm a method in A")
 6     def method(self):
 7         self.__method()
 8 
 9 class B(A):
10     def __method(self):
11         print("I'm a method in B")
12 
13 if __name__ == "__main__":
14     a = A()
15     a.method()
16     b = B()
17     b.method()
18 # 执行结果:
19 '''
20 I'm a method in A
21 I'm a method in A
22 '''
23 
24 
25 # 虽然上面写了__的一个示例,但下面但代码也很特别,请看下
26 class A(object):
27     def __method(self):
28         print("I'm a method in A")
29     def method(self):
30         self.__method()
31 
32 class B(A):
33     def __method(self):
34         print("I'm a method in B")
35     def method(self):
36         self.__method()
37 
38 if __name__ == "__main__":
39     a = A()
40     a.method()
41     b = B()
42     b.method()
43 # 执行结果:
44 '''
45 I'm a method in A
46 I'm a method in B
47 '''
View Code

 

 序号4的示例代码:

 1 # 序号4的代码示例
 2 # 重写__var__的方法
 3 class CrazyNumber(object):
 4     def __init__(self, n):
 5         self.n = n
 6     def __add__(self, other):
 7         return self.n + other
 8     def __sub__(self, other):
 9         return self.n - other
10     def __str__(self):
11         return str(self.n)
12 
13 if __name__ == "__main__":
14     num = CrazyNumber(10)
15     print(num)       # 10
16     print(num + 5)   # 15
17     print(num - 20)  # -10
View Code
1 class Person(object):
2     def __init__(self):
3         self.__name = "wang"
4         self.__age__ = 30
5 
6 if __name__ == "__main__":
7     p = Person()
8     print(p.__name)   # 报错
9     print(p.__age__)  # 30
View Code

 

posted @ 2020-04-14 20:47  wsongl  阅读(468)  评论(0编辑  收藏  举报