zoukankan      html  css  js  c++  java
  • python变量 方法 属性

    python变量 方法 属性

    所有成员中,只有普通变量/字段/属性的内容保存对象中,即:根据此类创建了多少对象,在内存中就有多少个普通变量/字段/属性。
    而其他的成员,则都是保存在类中,即:无论对象的多少,在内存中只创建一份。

    变量/字段/属性,以下统称为“变量”

    普通/实例/对象方法,以下统称为“实例方法”

    局部和普通表达的是同一个意思, 全局/类/静态 变量表达的是同一个意思

    通过类创建对象时,如果每个对象都具有相同的变量,那么就使用静态变量(也叫全局变量)

    class Province:
        # 静态/全局 变量
        country ='中国'
    
        def __init__(self, name):
            # 普通/局部 变量
            self.name = name
    
    obj = Province('湖北省')
    print(obj.name)  # 对象访问普通/局部 变量
    print(Province.name)  # 类访问普通/局部 变量
    此处会报错,类无法直接访问局部变量
    
    print(obj.country)  # 对象访问静态/全局 变量
    print(Province.country)  # 类访问静态/全局 变量

    总结:静态/全局变量可以被类和实例对象访问,普通/局部变量只能被实例对象访问

    class Province:
        # 静态/全局 变量
        country ='中国'
        GDP = 0
    
        def __init__(self, name):
            # 普通/局部 变量
            self.name = name
            GDP = GDP +1   
    # 会报错:无法在普通/实例对象 方法里面直接访问静态/全局 变量
    
        # 普通/实例对象 方法
        def get_GDP(self):
            return GDP
    
        # 普通/实例对象 方法
        def add_GDP(self):
            GDP = GDP +1

    在普通/实例对象 方法里面可以通过类.全局变量来访问静态/全局变量

    class Province:
        # 静态/全局 变量
        country ='中国'
        GDP = 0
    
        def __init__(self, name):
            # 普通/局部 变量
            self.name = name
            Province.GDP = Province.GDP +1
            
        # 普通/实例对象 方法
        def get_GDP(self):
            return Province.GDP
    
        # 普通/实例对象 方法
        def add_GDP(self):
         self.add_count = 10 Province.GDP
    = Province.GDP +1
            self.GDP = self.GDP + self.add_count

    总结:无法在普通/实例对象的方法里面直接访问静态/全局 变量,在普通/实例对象的方法里面可以通过slef.全局变量    或者    类.全局变量来访问静态/全局变量

    实例/普通方法一般只能被实例对象调用
    实例方法里面可以通过self.来访问局部变量,全局变量和其他实例方法,无法访问静态方法和类方法
    实例方法里面可以通过类名.来访问全局变量和所有方法(包括其他实例方法,静态方法,类方法)

    class Province:
        # 静态/全局 变量
        country ='中国'
        GDP = 0
    
        def __init__(self, name):
            # 普通/局部 变量
            self.name = name
            Province.GDP = Province.GDP +1
    
        # 普通/实例对象 方法
        def add_GDP(self):
            self.add_count = 10
            Province.GDP = Province.GDP +self.add_count
    
        @staticmethod
        def GDP_rate():
            GDP_sum = GDP +self.add_count
            rate = GDP/GDP_sum
    会报错:静态方法里面无法访问局部变量和全局变量

    静态方法意思是把 @staticmethod 下面的函数和所属的类截断了,这个函数就不属于这个类了,没有类的属性了,只不是还是要通过类名的方式调用  

    静态方法可以被类和实例对象调用(建议使用类调用)
    静态方法里面不能使用self
    静态方法里面不能访问类变量(全局/静态变量)和实例变量(局部变量),只能访问静态方法自己内部的变量

    静态方法里面可以通过类名.来访问除了实例/局部变量以外的所有变量和方法(包括:普通/实例方法,类方法,静态方法,类变量)
    静态方法的好处:不需要定义实例就可以访问这个方法,多个实例共享此静态方法,静态方法就像类里面的工具库

    class Province:
        # 静态/全局 变量
        country ='中国'
        GDP = 0
    
        def __init__(self, name):
            # 普通/局部 变量
            self.name = name
            Province.GDP = Province.GDP +1
    
        # 普通/实例对象 方法
        def add_GDP(self):
            self.add_count = 10
            Province.GDP = Province.GDP +self.add_count
    
        @classmethod
        def GDP_rate_cls(cls):
            GDP_sum = cls.GDP +self.add_count
            rate = cls.GDP/GDP_sum
    会报错:类方法无法访问普通/局部 变量

    类方法可以被类和实例对象调用(建议用类调用)
    类方法里面不能使用self,要使用cls
    类方法里面不能访问实例变量(局部变量),可以访问类变量(全局/静态变量)
    类方法里面可以访问所有方法(主要是通过cls.)

    类对象,方法,变量之间的调用关系如下图:

     橙色表示因为局部变量存储在对象里面(不在类里面)的原因导致调用/访问失败

    黄色表示无法调用/访问                      灰色表示可以调用/访问,但是不建议

     总结:

    1,实例/局部变量存储在实例对象里面(不在类里面)导致类,类方法,静态方法无法调用/访问

    2,全局变量一般都可以来调用

    3,实例方法不能直接被类方法和静态方法调用(需要new一个对象),所以:类方法和静态方法无法直接调用实例变量和实例方法,实例变量和实例方法只能被实例对象和实例方法直接调用

    4,实例方法一般都是通过self. 来调用所有变量和方法

    5,类方法一般都是通过cls. 或者类名. 来调用其他变量和方法(不能直接调用实例/局部变量和实例方法,需要new一个对象)

    6,静态方法像一个工具(与类和对象没有什么关系,主要为类和对象提供辅助工具方法),静态方法一般都是需要传入参数,也可以通过类名. 来调用其他变量和方法(不能直接调用实例/局部变量和实例方法,需要new一个对象)

  • 相关阅读:
    redis的坑
    引入easyui的404问题
    添加 @ResponseBody出现错误的问题
    星期,时间
    activiti的坑
    使用shiro遇到的问题
    IS应用程序池的查看与配置【转载】
    JS判断值是否是数字
    如何在EJS中将变量呈现为HTML?
    My97DatePicker日期控件的下载及使用方法
  • 原文地址:https://www.cnblogs.com/111testing/p/13659229.html
Copyright © 2011-2022 走看看