Python类变量与实例变量及成员函数修饰方式说明(与Java定义方式进行类比)
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类的方法有普通函数、类函数、静态函数之分
方法上不写任何注解(普通函数):这种修饰方式类比于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)
方法上使用@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()
方法上使用@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定义方式进行类比)的更多相关文章
- Python类变量,实例变量,类方法,实例方法,静态方法的分析
Python作为动态语言,跟静态语言如c/c++有很大区别,其中的一个重要的特性就是Python的变量无需声明直接可用.同样,类的成员变量无需声明,直接可用.目的是为了动态语言跟灵活,在思路想到的时候 ...
- 关于python类变量和实例变量
今天在看python的类和实例的时候,突然发现了一个以前遗漏的点,也就是类变量和实例变量.首先需要理解一下类变量和实例变量的概念. 类全局变量:在类中定义,对类和由类生成的实例生效,如果通过方法对类变 ...
- Python类变量和实例变量
class TestClass(object): val1 = 100 #类变量 def __init__(self): self.val2 = 200 #实例变量 ...
- python类变量和实例变量的区别
类变量:是为类服务的,类所有的实例都共享使用,在一个地方被改变,所有调用的地方变量值都改变.定义类时的写法为类名.变量名 实例变量:是在实例中生效的,每个实例变量的值都根据实例本身需求进行修改,不会影 ...
- python 类变量和实例变量
super(cls, inst) 获得的是 cls 在 inst 的 MRO 列表中的下一个类. 实例的属性存储在实例的__dict__中,类属性和方法存储在类的__dict__中.查找属性时,先检 ...
- 【类不类二】Python的类变量与实例变量
在研究类的时候,难免会有很多疑问,C论坛和博客园高手如云(不知道是不是也美女如云), 搜到了这篇博文,是介绍Python的类变量和实例变量的 ! 刚好在下对self.***这种形式的实例变 量不是很理 ...
- python(四)类变量和实例变量
转载自[1] 实际这是个实例变量是否指向类变量的问题. python的类变量和实例变量,顾名思义,类变量是指跟类的变量,而实例变量,指跟类的具体实例相关联的变量,具体体现为self.x 等.实际要注意 ...
- Python基础-类变量和实例变量
Python基础-类变量和实例变量 写在前面 如非特别说明,下文均基于Python3 大纲: 1. 类变量和实例变量 在Python Tutorial中对于类变量和实例变量是这样描述的: Genera ...
- python中的实例方法、静态方法、类方法、类变量和实例变量
class MyTest: myname = 'peter' # add a instance attribute def __init__(self, name): self.n ...
随机推荐
- CodeForces 1292A NEKO's Maze Game(思维)
#include <stdio.h> #include <string.h> #include <iostream> #include <string> ...
- XssFilter EscapeUtil
package com.ruoyi.framework.config; import java.util.HashMap; import java.util.Map; import javax.ser ...
- Java--Runtime.addShutdownHook
转自:http://kim-miao.iteye.com/blog/1662550 一.Runtime.addShutdownHook理解 在看别人的代码时,发现其中有这个方法,便顺便梳理一下. vo ...
- 如何优雅的设计APP页面?
页面框架设计只是整个产品设计中的一环,不要把眼界局限在这一环,也不要只站需求.只站在交互.只站在视觉上思考问题,从多个角度看问题,你才会学会成长. 产品设计是一个系统工程,单独拧出来其中一个流程来讲, ...
- python获取当前时间戳
import time # 获取当前时间戳print(int(time.time()))
- [Algo] 175. Decompress String II
Given a string in compressed form, decompress it to the original string. The adjacent repeated chara ...
- Kubernetes 问题定位技巧:分析 ExitCode
使用 kubectl describe pod 查看异常的 pod 的状态,在容器列表里看 State 字段,其中 ExitCode 即程序退出时的状态码,正常退出时为0.如果不为0,表示异常退出,我 ...
- Macroevolution|Silent changes|CNEs|Transposable elements|Neutral sites
Interspecies genomic comparison 因为脊椎动物诞生早,在演化过程中有Macroevolution(因为自然选择或遗传漂变导致持续突变同时表型发生改变),但是存在一种基因缺 ...
- python学习——函数及其参数
函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段.函数能提高应用的模块性,和代码的重复利用率.严格来说python只有函数,没有过程,人们理解的函数都是带有return的,而过程 ...
- liquibase使用教程
在项目中引入liquibase过程: 1.父项目 pom.xml 中添加依赖 <dependencies> <dependency> <groupId>mysql& ...