进入正题,来看一个实例来了解python中类,对象中公有属性,私有属性及局部变量,全局变量的区别.
root@10.1.6.200:~# cat object.py
#!/usr/bin/env python
#coding:utf8
class Dave():
var1 = "class atribute,public atrribute var1" #类属性,公有属性var1
__var2 = "class self atribute __var2" #类的私有属性__var2
def fun(self):
self.var2 = "object public atrribute var2" #对象的公有属性var2
self.__var3 = "object self atrribute __var3" #对象的私有属性__var3
var4 = "Function of the local variable var4" #函数fun的局部变量
def other(self):
print self.__var3
根据上面代码后面加入以下代码可以实例化一个对象及获取类公有属性.
he = Dave() #实例化一个对象he
print he.var1 #从实例中获取类的公有属性
print Dave.var1 #直接从类中获取公有属性
root@10.1.6.200:~# ./object.py
class atribute,public atrribute var1
class atribute,public atrribute var1
类的私有属性不能被类或对象直接调用
he = Dave()
print Dave.__var2
print he.__var2
root@10.1.6.200:~# ./object.py
Traceback (most recent call last):
File "./object.py", line 19, in
print Dave.__var2
AttributeError: class Dave has no attribute '__var2'
但可以通过方法间接调用.
class Dave():
var1 = "class atribute,public atrribute var1" #类属性,公有属性var1
__var2 = "class self atribute __var2" #类的私有属性__var2
def other(self):
print Dave.__var2
he = Dave()
he.other()
root@10.1.6.200:~# ./object.py
class self atribute __var2
获取类方法中的对象的公有属性,需要先通过对象执行类中的方法.并通过对象调用该属性.
he = Dave()
liu = Dave()
he.fun()
print he.var2
print liu.var2
root@10.1.6.200:~# ./object.py
object public atrribute var2
Traceback (most recent call last): #对象liu由于没有调用fun方法所有就没有该属性.
File "./object.py", line 20, in
print liu.var2
AttributeError: Dave instance has no attribute 'var2'
对象的私有属性和类的私有属性类似,也不能被类或对象直接调用
he = Dave()
he.fun()
print he.__var3
root@10.1.6.200:~# ./object.py
Traceback (most recent call last):
File "./object.py", line 18, in
print he.__var3
AttributeError: Dave instance has no attribute '__var3'
局部变量也不能被对象直接调用,可以在函数内部使用.
he = Dave()
he.fun()
print he.var4
root@10.1.6.200:~# ./object.py
Traceback (most recent call last):
File "./object.py", line 18, in
print he.var4
AttributeError: Dave instance has no attribute 'var4'
def fun(self):
self.var2 = "object public atrribute var2" #对象的公有属性var2
self.__var3 = "object self atrribute __var3" #对象的私有属性__var3
var4 = "Function of the local variable var4" #函数fun的局部变量
print var4 #可以在函数内部直接打印,只在该函数内有用
print self.__var3
he = Dave()
he.fun()
root@10.1.6.200:~# ./object.py
Function of the local variable var4
object self atrribute __var3 那么var4和self._var3有什么区别呢.目前看2个都在外部使用不了.下面在定义一个函数other调用.
def fun(self):
self.var2 = "object public atrribute var2" #对象的公有属性var2
self.__var3 = "object self atrribute __var3" #对象的私有属性__var3
var4 = "Function of the local variable var4" #函数fun的局部变量
print var4 #一个函数的局部变量在另外一个函数是访问不到的
print self.__var3
def other(self):
print var4
print self.__var3
he = Dave()
he.fun()
print "#"*100
he.other()
root@10.1.6.200:~# ./object.py
Function of the local variable var4
object self atrribute __var3
####################################################################################################
Traceback (most recent call last): #会认为var4是全局变量打印.定义全局变量可在class 头加入 var4 = "global"
File "./object.py", line 22, in
he.other()
File "./object.py", line 16, in other
print var4
NameError: global name 'var4' is not defined
#!/usr/bin/env python
#coding:utf8
var4 = "global" #定义var4为全局变量
class Dave():
var1 = "class atribute,public atrribute var1" #类属性,公有属性var1
__var2 = "class self atribute __var2" #类的私有属性__var2
def fun(self):
self.var2 = "object public atrribute var2" #对象的公有属性var2
self.__var3 = "object self atrribute __var3" #对象的私有属性__var3
var4 = "Function of the local variable var4" #函数fun的局部变量
print var4
print self.__var3
def other(self):
print var4
print self.__var3 #可调用私有属性,前提是先调用fun
he = Dave()
he.fun()
print "#"*100
he.other()
root@10.1.6.200:~# ./object.py
Function of the local variable var4
object self atrribute __var3
####################################################################################################
global
object self atrribute __var3