一、类的属性总结(类的属性定义在方法外,对象的属性定义在方法内)
理解:
类的(静态)属性:(人类的五官,理解为变量)
类的(动态)方法:(人类吃穿住行,理解为一个函数,至少带一个参数self,指向类本身)
对象:类的实例化,之后才能有属性和方法
1)类的属性,也是公有属性;类的私有属性
2)对象的公有属性;对象的私有属性
3)函数局部变量;全局变量
4)内置属性
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
|
#!/usr/bin/env python
#encoding:utf-8
var6
=
"全局变量var6"
class
Myclass(
object
):
var1
=
"类的公有属性var1"
__var2
=
"类的私有属性_var2"
def
fun1(
self
):
self
.var3
=
"方法的公有属性var3"
self
.__var4
=
"方法的私有属性_var4"
var5
=
"函数的局部变量var5"
print
var5
print
var6
def
fun2(
self
):
print
self
.var1
print
self
.__var2
def
fun3(
self
):
print
self
.var3
print
self
.__var4
mc
=
Myclass()
print
mc.var1
# 外部调用类的公有属性
print
mc._Myclass__var2
# 外部调用类的私有属性,一般测试用
print
Myclass.var1
# 通过类名调用类的公有属性
#print Myclass.__var2 # 不能通过类名调用类的私有属性
#print Myclass.var3 # 不能通过类名调用内部函数的公有属性和私有属性
#print Myclass.__var4
mc.fun1()
print
mc.var3
# 外部调用方法(可以看成是带self的内部函数)的公有属性,前提是先实例化类并执行该方法
#print mc.__var4 # 外部不能调用方法的私有属性
mc
=
Myclass()
mc.fun2()
# 内部调用类的公有、私有属性
mc
=
Myclass()
mc.fun1()
mc.fun3()
# 内部函数可调用其他内部函数的公有、私有属性,前提是先实例化类并执行该方法
mc
=
Myclass()
print
Myclass.__dict__
# 内置属性调用
|
二、类的方法总结
1)公有方法,私有方法
2)类方法(动态):classmethod()函数处理,没有被调用的类中其余参数不会加载进内存中
3)静态方法:函数不带self参数,使用staticmethod()函数处理(如果不处理,缺少self,调用时会报错),加载关于这个类的所有东西
4)内置方法
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
|
#/usr/bin/env python
#encoding:utf-8
class
Myclass(
object
):
name
=
"Test"
def
__init__(
self
):
self
.fun1()
self
.__fun2()
self
.classFun()
self
.staticFun()
print
(
"我是内置函数或构造函数,实例化时自动执行"
)
def
fun1(
self
):
print
self
.name,
print
(
"我是公有方法"
)
self
.__fun2()
def
__fun2(
self
):
print
self
.name,
print
(
"我是私有方法"
)
@
classmethod
def
classFun(
self
):
print
self
.name,
print
(
"我是类方法或动态方法"
)
@
staticmethod
def
staticFun():
print
Myclass.name,
print
(
"我是静态方法"
)
mc
=
Myclass()
mc.fun1()
# 外部调用公有方法
#mc.__fun2() # 外部不能直接调用私有方法,可以通过内部函数间相互调用
Myclass.classFun()
# 类方法(动态)如果要通过类名来调用,需加装饰器classmethod()
Myclass.staticFun()
# 静态方法如需要类名来调用,需加装饰器staticmethod(),此时函数不再使用self
|
本文转自 huangzp168 51CTO博客,原文链接:http://blog.51cto.com/huangzp/2047973,如需转载请自行联系原作者