Python类变量与实例变量及成员函数修饰方式说明(与Java定义方式进行类比)
2024-08-30 06:18:13
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")
最新文章
- SOAPUI使用教程-MockOperations和响应
- 打包app命令行
- [LeetCode]题解(python):036-Valid Sudoku
- Enum 绑定到 RadioButton
- Leetcode: Random Pick Index
- bigDecimal 使用小结
- update多表陷阱
- Understanding Manycore Scalability of File Systems
- Scrum 学习笔记
- OpenStack虚机相关错误
- EXE转JPG后缀格式工具(真实JPG后缀)
- [20160711][在Windows下调用neven链接库]
- R语言与格式、日期格式、格式转化
- Mysql加密解密随机函数
- Android studio 常见错误修改
- 第二章 Java程序设计环境
- tcp config
- HAProxy 参数配置
- # 2019-2020-3 《Java 程序设计》第五周学习总结
- C#HttpUtility.UrlEncode 大写问题
热门文章
- iPhone到底能不能充一整夜电?
- 转载:微信小程序源码提取反编译
- mysql的show status和show global status区别在哪
- 探讨 Git 代码托管平台的若干问题 - 2019 版
- JVM学习思维导图
- upstream实现内网网站在公网访问
- 吴裕雄--天生自然 JAVA开发学习:抽象类
- 吴裕雄--天生自然 PYTHON3开发学习:网络编程
- Spring Test+JUnit4整合使用测试ZZJ_淘淘商城项目:day01(RESTful Web Service)
- Codeforces Round #316 (Div. 2) D计算在一棵子树内某高度的节点