文章目录
- 类的属性总结
- 方法总结
类的属性总结
类的公有属性可以实例化之后,通过对象直接访问。
#!/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
执行结果
类属性,类的公有属性 var1
类的私有属性实例化之后通过对象不可直接访问,可使用instance._classname__attribute方式访问。
#!/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
执行结果
类的私有属性 __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'
对象的公有属性需要调用对应的方法之后,才可以通过对象访问。
#!/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
执行结果
对象的公有属性 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'
对象的私有属性,通过对象不可访问。
函数的局部变量,通过对象不可访问。
是否可以通过类访问?
公有属性可以直接通过类访问
#!/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
执行结果
类属性,类的公有属性 var1
私有属性不可通过类直接访问。
方法的公有属性和私有属性不可通过类直接访问。
方法的公有属性只能通过对象来访问。
方法内部是否可以调用呢?
#!/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()
执行结果
类属性,类的公有属性 var1
类的私有属性 __var2
对象的共有属性 var3
对象的私有属性 __var4
方法内部可以直接调用类的公有属性和私有属性。
方法内部调用其它方法的公有属性和私有属性,需要先执行该方法再调用,否则无法调用。
方法内部无法调用其它方法的局部变量。
内置属性可以通过对象或类调用。
#!/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__
执行结果
函数的局部变量 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}
方法总结
#!/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 "我是私有方法"
@classmethod
def classFun(self):
print self.name,
print "我是类方法"
@staticmethod
def staticFun(): ## 不可添加self
print MyClass.name, ## 通过类名调用
print "我是静态方法"
mc = MyClass()
mc.func1()
MyClass.classFun()
MyClass.staticFun()
执行结果
Test 我是公有方法
Test 我是私有方法
Test 我是类方法
Test 我是静态方法
公有方法可以在类的内部和外部调用;
私有方法只能在类的内部调用;
类方法添加装饰器,通过类调用
内置方法
#!/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 "我是私有方法"
@classmethod
def classFun(self):
print self.name,
print "我是类方法"
@staticmethod
def staticFun():
print MyClass.name,
print "我是静态方法"
mc = MyClass()
执行结果
Test 我是公有方法
Test 我是私有方法
Test 我是类方法
Test 我是静态方法