文章目录

  • 类的属性总结
  • 方法总结


类的属性总结

类的公有属性可以实例化之后,通过对象直接访问。

#!/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 我是静态方法