• Python类中的变量有类变量和实例变量之分。

  • 类变量:变量绑定在类上,同一个类之间的共享变量,类比于Java中的静态变量static

    • 公有变量定义

      • Java 的定义方式

        class Test{
        public static class_variable = "123"
        }
      • Python3 定义方式

        class Test:
        class_variable = "123"
    • 私有变量定义

      • Java 的定义方式

        class Test{
        private static class_variable = "123"
        }
      • Python3 定义方式

        class Test:
        __class_variable = "123"
  • 实例变量:变量绑定在类的实例上,同一个类的不同实例之间不共享,类比于Java中的成员变量

    • 公有变量定义

      • Java 的定义方式

        class Test{
        public instance_variable = "123"
        }
      • Python3 定义方式

        class Test:
        def __init__(self):
        self.instance_variable = "123"
    • 私有变量定义

      • Java 的定义方式

        class Test{
        private instance_variable = "123"
        }
      • Python3 定义方式

        class Test:
        def __init__(self):
        self.__instance_variable = "123"
  • Python类的方法有普通函数、类函数、静态函数之分

    1. 方法上不写任何注解(普通函数):这种修饰方式类比于Java中的成员函数的方式,在调用这种函数时会隐式地传递一个指向自身的指针self,通过这个指针可以调用示例变量,类似于Java中使用的this变量

      class Test: 
      
          def __init__(self):
      self.__instance_variable = "123" def test(self):
      print(self.__instance_variable) if __name__ == "__main__":
      t = Test()
      t.test()
      # 此种方式调用实例变量将会报错,因为该实例变量是私有变量,不支持外部调用
      # print(t.__instance_variable)
    2. 方法上使用@classmethod注解(类函数):类函数无法访问实例变量,只能访问类变量,这种修饰方式类比于Java中的静态函数,但是又有所不同,调用这种函数的时候会隐式地传递一个类指针cls,通过这个指针可以调用类变量,而Java在成员函数中引用静态变量时是不需要显示指定类来调用静态变量的

      class Test:
      
          class_variable = "123"
      
          def __init__(self):
      self.__instance_variable = "234" @classmethod
      def test(cls):
      print(cls.class_variable)
      # 此种方式调用实例变量将会报错,因为类函数不能调用实例变量
      # print(cls.__instance_variable) if __name__ == "__main__":
      # 可以实例调用类函数,也可以类直接调用类函数
      t = Test()
      t.test()
      Test.test()
    3. 方法上使用@staticmethod注解(静态函数):Python3中的静态函数与Java中的静态函数定义不同,其静态函数绑定在类上,但是不依赖于类变量或其实例变量,因此也不会隐式传递任何指针

      class Test: 
      
          class_variable = "123"
      
          def __init__(self):
      self.__instance_variable = "234" @staticmethod
      def test(x): # 注:此处已经不再需要设置默认接收指针的变量self或cls,x为调用函数时手动传递的变量
      print(x)
      # 类变量必须通过类来引用,实例变量必须通过实例来引用,下面都是错误的用法,无法直接访问类变量或实例变量
      # print(class_variable)
      # print(__instance_variable) if __name__ == "__main__":
      # 可以实例调用类函数,也可以类直接调用类函数
      t = Test()
      t.test("233")
      Test.test("233")

Python类变量与实例变量及成员函数修饰方式说明(与Java定义方式进行类比)的更多相关文章

  1. Python类变量,实例变量,类方法,实例方法,静态方法的分析

    Python作为动态语言,跟静态语言如c/c++有很大区别,其中的一个重要的特性就是Python的变量无需声明直接可用.同样,类的成员变量无需声明,直接可用.目的是为了动态语言跟灵活,在思路想到的时候 ...

  2. 关于python类变量和实例变量

    今天在看python的类和实例的时候,突然发现了一个以前遗漏的点,也就是类变量和实例变量.首先需要理解一下类变量和实例变量的概念. 类全局变量:在类中定义,对类和由类生成的实例生效,如果通过方法对类变 ...

  3. Python类变量和实例变量

    class TestClass(object):     val1 = 100  #类变量 def __init__(self):         self.val2 = 200  #实例变量     ...

  4. python类变量和实例变量的区别

    类变量:是为类服务的,类所有的实例都共享使用,在一个地方被改变,所有调用的地方变量值都改变.定义类时的写法为类名.变量名 实例变量:是在实例中生效的,每个实例变量的值都根据实例本身需求进行修改,不会影 ...

  5. python 类变量和实例变量

    super(cls, inst) 获得的是 cls 在 inst 的 MRO 列表中的下一个类.  实例的属性存储在实例的__dict__中,类属性和方法存储在类的__dict__中.查找属性时,先检 ...

  6. 【类不类二】Python的类变量与实例变量

    在研究类的时候,难免会有很多疑问,C论坛和博客园高手如云(不知道是不是也美女如云), 搜到了这篇博文,是介绍Python的类变量和实例变量的 ! 刚好在下对self.***这种形式的实例变 量不是很理 ...

  7. python(四)类变量和实例变量

    转载自[1] 实际这是个实例变量是否指向类变量的问题. python的类变量和实例变量,顾名思义,类变量是指跟类的变量,而实例变量,指跟类的具体实例相关联的变量,具体体现为self.x 等.实际要注意 ...

  8. Python基础-类变量和实例变量

    Python基础-类变量和实例变量 写在前面 如非特别说明,下文均基于Python3 大纲: 1. 类变量和实例变量 在Python Tutorial中对于类变量和实例变量是这样描述的: Genera ...

  9. python中的实例方法、静态方法、类方法、类变量和实例变量

    class MyTest: myname = 'peter' # add a instance attribute    def __init__(self, name):        self.n ...

随机推荐

  1. Vue.js——3.增删改查

    vue  写假后台  bootstrap 做的样式 代码 <!DOCTYPE html> <html lang="en"> <head> < ...

  2. git push报错! [rejected] master -> master (non-fast-forward) error: failed to push some refs to 'https://gitee.com/XXX.git

    git pull origin master --allow-unrelated-histories  //把远程仓库和本地同步,消除差异 git add . git commit -m"X ...

  3. Java 静态static关键字,main函数,对象的初始化过程,对象调用成员,单例模式的设计,静态代码块(6)

    Java 静态static关键字,静态代码块详情参考:static的使用原理讲解http://www.cnblogs.com/itcqx/p/5519464.html main函数: java Mai ...

  4. 编程作业3.1:Multi-class classification(One-vs-all)

    题目: 在本次练习中,你将使用逻辑回归和神经网络来识别手写数字(从0到9). 今天,自动手写数字识别被广泛使用,从识别信封上的邮政编码到识别银行支票上的金额.这个练习将向你展示如何将你所学的方法用于此 ...

  5. Java 中的接口有什么作用?以及接口和其实现类的关系?

    Java 中的接口有什么作用? - Ivony的回答 - 知乎 https://www.zhihu.com/question/20111251/answer/16585393 这是一个初学者非常常见的 ...

  6. UML-领域模型-准则

    1.是否使用工具维护模型? 在白板上画完草图后,整理到UML工具里去 2.模型中是否要包含“票据”? 不包含,因为,票据用于退货,而本次迭代不涉及退货所以不需要体现. 总结:概念一定在本次迭代需求内的 ...

  7. 如何升级Powershell How to upgrade powershell 5

    查看当前版本 Win+R 输入 powershell 进入. 输入:$PSVersionTable 可以看到PS的version: 当前是2.0 下载WMF Windows Management Fr ...

  8. C++如何输入含空格的字符串

    1.scanf函数(包含头文件#include <stdio.h>) scanf函数一般格式为scanf(“%s”,st),但scanf默认回车和空格是输入不同组之间的间隔和结束符号,所以 ...

  9. 埃拉托色尼(Eratosthenes)筛法

     用筛选法求1—100之内的素数(此法难度的话,方法可以不界定:能完成求1—100之内的素数即可).   在一张纸上写上1到100全部整数,然后逐个判断它们是否是素数,找出一个非素数,就把它挖掉,最后 ...

  10. CSP模拟赛游记

    时间:2019.10.5 考试时间:100分钟(连正式考试时间的一半还没有到)题目:由于某些原因不能公开. 由于第一次接触NOIinux系统所以连怎么建文件夹,调字体,如何编译都不知道,考试的前半小时 ...