python—类的属性和方法总结

发布时间:2019-09-17 07:48:50编辑:auto阅读(1560)

    一、类的属性总结(类的属性定义在方法外,对象的属性定义在方法内)

    理解:

    类的(静态)属性:(人类的五官,理解为变量)

    类的(动态)方法:(人类吃穿住行,理解为一个函数,至少带一个参数self,指向类本身)

    对象:类的实例化,之后才能有属性和方法


    1)类的属性,也是公有属性;类的私有属性

    2)对象的公有属性;对象的私有属性

    3)函数局部变量;全局变量

    4)内置属性

    #!/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)内置方法

    #/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


关键字