类的属性总结
类属性相关内容如下
是否可通过对象访问?
- 类的公有属性可以实例化之后,通过对象直接访问。
1
2
3
4
5
6
7
8
9
10
11
12
13
14#!/usr/local/python
#coding:utf8
class MyClass(object):
var1 = '类属性,类的公有属性 var1'
__var2 = '类的私有属性 __var2'
def func1(self):
self.var3 = '对象的共有属性 var3'
self.__var4 = '对象的私有属性 __var4'
var5 = '函数的局部变量'
mc = MyClass()
print mc.var1
执行结果1
类属性,类的公有属性 var1
- 类的私有属性实例化之后通过对象不可直接访问,可使用
instance._classname__attribute
方式访问。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15#!/usr/local/python
#coding:utf8
class MyClass(object):
var1 = '类属性,类的公有属性 var1'
__var2 = '类的私有属性 __var2'
def func1(self):
self.var3 = '对象的共有属性 var3'
self.__var4 = '对象的私有属性 __var4'
var5 = '函数的局部变量'
mc = MyClass()
print mc._MyClass__var2
print mc.__var2
执行结果1
2
3
4
5类的私有属性 __var2
Traceback (most recent call last):
File "1_9_6_3.py", line 16, in <module>
print mc.__var2
AttributeError: 'MyClass' object has no attribute '__var2'
- 对象的公有属性需要调用对应的方法之后,才可以通过对象访问。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17#!/usr/local/python
#coding:utf8
class MyClass(object):
var1 = '类属性,类的公有属性 var1'
__var2 = '类的私有属性 __var2'
def func1(self):
self.var3 = '对象的共有属性 var3'
self.__var4 = '对象的私有属性 __var4'
var5 = '函数的局部变量'
mc = MyClass()
mc.func1()
print mc.var3
mc1 = MyClass()
print mc1.var3
执行结果1
2
3
4
5对象的公有属性 var3
Traceback (most recent call last):
File "1_9_6_3.py", line 17, in <module>
print mc1.var3
AttributeError: 'MyClass' object has no attribute 'var3'
- 对象的私有属性,通过对象不可访问。
- 函数的局部变量,通过对象不可访问。
是否可以通过类访问?
- 公有属性可以直接通过类访问
1
2
3
4
5
6
7
8
9
10
11
12
13#!/usr/local/python
#coding:utf8
class MyClass(object):
var1 = '类属性,类的公有属性 var1'
__var2 = '类的私有属性 __var2'
def func1(self):
self.var3 = '对象的共有属性 var3'
self.__var4 = '对象的私有属性 __var4'
var5 = '函数的局部变量'
print MyClass.var1
执行结果1
类属性,类的公有属性 var1
- 私有属性不可通过类直接访问。
- 方法的公有属性和私有属性不可通过类直接访问。
- 方法的公有属性只能通过对象来访问。
方法内部是否可以调用呢?1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21#!/usr/local/python
#coding:utf8
class MyClass(object):
var1 = '类属性,类的公有属性 var1'
__var2 = '类的私有属性 __var2'
def func1(self):
self.var3 = '对象的共有属性 var3'
self.__var4 = '对象的私有属性 __var4'
var5 = '函数的局部变量'
def func2(self):
print self.var1
print self.__var2
print self.var3
print self.__var4
mc = MyClass()
mc.func1()
mc.func2()
执行结果1
2
3
4类属性,类的公有属性 var1
类的私有属性 __var2
对象的共有属性 var3
对象的私有属性 __var4
- 方法内部可以直接调用类的公有属性和私有属性。
- 方法内部调用其它方法的公有属性和私有属性,需要先执行该方法再调用,否则无法调用。
- 方法内部无法调用其它方法的局部变量。
- 内置属性可以通过对象或类调用。
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#!/usr/local/python
#coding:utf8
var5 = '全局变量 var5'
class MyClass(object):
var1 = '类属性,类的公有属性 var1'
__var2 = '类的私有属性 __var2'
def func1(self):
self.var3 = '对象的共有属性 var3'
self.__var4 = '对象的私有属性 __var4'
var5 = '函数的局部变量 var5'
print var5
def func2(self):
print self.var1
print self.__var2
print self.var3
print self.__var4
print var5
mc = MyClass()
mc.func1()
print '#'*50
mc.func2()
print '#'*50
print mc.__dict__
print '#'*50
print MyClass.__dict__
执行结果1
2
3
4
5
6
7
8
9
10
11函数的局部变量 var5
##################################################
类属性,类的公有属性 var1
类的私有属性 __var2
对象的共有属性 var3
对象的私有属性 __var4
全局变量 var5
##################################################
{'_MyClass__var4': '\xe5\xaf\xb9\xe8\xb1\xa1\xe7\x9a\x84\xe7\xa7\x81\xe6\x9c\x89\xe5\xb1\x9e\xe6\x80\xa7 __var4', 'var3': '\xe5\xaf\xb9\xe8\xb1\xa1\xe7\x9a\x84\xe5\x85\xb1\xe6\x9c\x89\xe5\xb1\x9e\xe6\x80\xa7 var3'}
##################################################
{'func2': <function func2 at 0x7fbeac51a8c0>, '__module__': '__main__', 'var1': '\xe7\xb1\xbb\xe5\xb1\x9e\xe6\x80\xa7\xef\xbc\x8c\xe7\xb1\xbb\xe7\x9a\x84\xe5\x85\xac\xe6\x9c\x89\xe5\xb1\x9e\xe6\x80\xa7 var1', '__weakref__': <attribute '__weakref__' of 'MyClass' objects>, 'func1': <function func1 at 0x7fbeac51a230>, '__dict__': <attribute '__dict__' of 'MyClass' objects>, '_MyClass__var2': '\xe7\xb1\xbb\xe7\x9a\x84\xe7\xa7\x81\xe6\x9c\x89\xe5\xb1\x9e\xe6\x80\xa7 __var2', '__doc__': None}
类的方法总结
- 公有方法
- 私有方法
- 类方法
- 静态方法
- 内置方法
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#!/usr/bin/python
#coding:utf8
class MyClass(object):
name = 'Test'
def func1(self):
print self.name,
print "我是公有方法"
self.__func2() ## 类的内部调用私有方法
def __func2(self):
print self.name,
print "我是私有方法"
def classFun(self):
print self.name,
print "我是类方法"
def staticFun(): ## 不可添加self
print MyClass.name, ## 通过类名调用
print "我是静态方法"
mc = MyClass()
mc.func1()
MyClass.classFun()
MyClass.staticFun()
执行结果1
2
3
4Test 我是公有方法
Test 我是私有方法
Test 我是类方法
Test 我是静态方法
- 公有方法可以在类的内部和外部调用;
- 私有方法只能在类的内部调用;
- 类方法添加装饰器,通过类调用
内置方法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#!/usr/bin/python
#coding:utf8
class MyClass(object):
name = 'Test'
def __init__(self):
self.func1()
self.__func2()
self.classFun()
self.staticFun()
def func1(self):
print self.name,
print "我是公有方法"
def __func2(self):
print self.name,
print "我是私有方法"
def classFun(self):
print self.name,
print "我是类方法"
def staticFun():
print MyClass.name,
print "我是静态方法"
mc = MyClass()
执行结果1
2
3
4Test 我是公有方法
Test 我是私有方法
Test 我是类方法
Test 我是静态方法
实例
使用python写一个memcached的启动脚本,可以参照/etc/init.d/memcached
脚本。
下面是启动脚本的大体结构,下一章节详细介绍类中方法的实现。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#!/usr/bin/python
import sys
class Process(object):
'''memcached rc script'''
def __init__(self, name, program, args, workdir):
self.name = name
self.program = program
self.args = args
self.workdir = workdir
def _init(self):
def start(self):
def stop(self):
def restart(self):
self.stop()
self.start()
def status(self):
def help(self):
def main():
name = 'memcached'
prog = '/usr/bin/memcached'
args = '-u nobody -p 11211 -c 1024 -m 64'
wd = '/var/tmp/memcached'
pm = Process(name = name,
program = prog,
args = args,
workdir = wd)
try:
cmd = sys.argv[1]
except IndexError, e:
print "Option error"
sys.exit()
if cmd == 'start':
pm.start()
elif cmd == 'stop':
pm.stop()
elif cmd == 'restart':
pm.restart
elif cmd == 'status':
pm.status()
else:
pm.help()
if __name__ == 'main':
main()