python类变量与成员变量
类变量与成员变量
关注公众号“轻松学编程”了解更多。
在类中声明的变量我们称之为类变量【静态成员变量】,
在__init__()函数中声明的变量并且绑定在实例上的变量我们称之为成员变量。
类变量直接可以通过类名来调用。
1、若类变量与成员同时存在并且同名
使用对象来调用的时候,获取的结果是成员变量的值,
使用类名来调用,获取的是类变量的值。
2、若类变量存在,成员变量不存在,
使用对象来调用的时候,它首先寻找成员变量,
如果成员变量不存在。则去寻找类变量。
2、若类变量不存在,成员变量存在:
使用类名来调用,则会报错
总结:
类变量通过类名或者对象来调用都不会报错,但是成员变量只能通过对象来调用。
通过对象来修改类属性的时候,只能作用到对象自己本身,作用不到类,
若是通过类名来修改类属性,则只对类变量的值进行修改。
class Person(object):
# 类变量
name = "haha"
age = "19"
height = 170
def __init__(self,name,age,weight):
# 成员变量
self.name = name
self.age = age
self.weight = weight
def sayHeight(self):
print(self.height)
per = Person("xiaoming",19,50)
print(per.name)
print(Person.name)
# print(Person.weight)
per.height = 190
print(per.height)
print(Person.height)
print('*********')
Person.height = 200
print(Person.height)
print(per.height)
per.sayHeight()
输出:
xiaoming
haha
190
170
*********
200
190
190
类方法与成员方法
类方法,成员方法
类方法:使用类名来调用的方法
成员方法:使用对象来调用的方法
若一个方法定义在类中,但是没有参数[一般默认self],此时我们只能通过类名来调用
若我们需要使用到一个类的对象,首先要实例化。
class Person(object):
def __init__(self,name,age):
self.name = name
self.age = age
def say(self):
print("I am %s, I am %d year old"%(self.name,self.age))
def sayHello():
print('hello I am class function')
per = Person("xiaoming",19)
per.say()
Person.sayHello()
输出:
I am xiaoming, I am 19 year old
hello I am class function
类方法与静态方法
静态方法:
当调用此方法时,不会将类的实例传递给它。
在类中定义的函数。
无需实例化类,就可以调用。它的定义在继承中,是不可变的。
类方法:
当调用此方法时,将函数所属的类作为第一个参数传递。
class A(object):
def foo(self, x):
print("executing foo(%s, %s)" % (self, x))
@classmethod
def class_foo(cls, x):
print("executing class_foo(%s, %s)" % (cls, x))
@staticmethod
def static_foo(x):
print("executing static_foo(%s)" % x)
a = A()
# 调用foo函数,参数传入1
a.foo(1)
# 调用class_foo,参数传入1
A.class_foo(1)
# 调用static_foo,参数传入1
A.static_foo(1)
a.static_foo(1):
输出:
executing foo(<__main__.A object at 0x0000024F126489B0>, 1)
executing class_foo(<class '__main__.A'>, 1)
executing static_foo(1)
executing static_foo(1)
下划线
下划线定义特殊的方法,一般情况下是系统定义名字,
如:
__init()__、__del()__
前双下划线(age):表示私有类型的变量(privated),只能在本类中进行访问,外界不能直接访问。如__age.
单下划线(_age):以单下划线开头的表示保护类型变量(protected),
保护类型的变量只允许本身以及子类访问,不能用于from module import *
[使用单下划线开头的时候,虽然变量能够直接被访问,但是请把变量视为一个保护类型的变量,尽量不要去访问。
后记
【后记】为了让大家能够轻松学编程,我创建了一个公众号【轻松学编程】,里面有让你快速学会编程的文章,当然也有一些干货提高你的编程水平,也有一些编程项目适合做一些课程设计等课题。
也可加我微信【1257309054】,拉你进群,大家一起交流学习。
如果文章对您有帮助,请我喝杯咖啡吧!
公众号
关注我,我们一起成长~~
python类变量与成员变量的更多相关文章
- Python 类变量和成员变量
Python 类变量和成员变量 类与对象的方法 我们已经讨论了类与对象的功能部分,现在我们来看一下它的数据部分.事实上,它们只是与类和对象的名称空间 绑定 的普通变量,即这些名称只在这些类与对象的前提 ...
- Python 类变量,成员变量,静态变量,局部变量
局部 class TestClass(object): val1 = 100 def __init__(self): self.val2 = 200 def fcn(self,val = 400): ...
- Python类变量与实例变量及成员函数修饰方式说明(与Java定义方式进行类比)
Python类中的变量有类变量和实例变量之分. 类变量:变量绑定在类上,同一个类之间的共享变量,类比于Java中的静态变量static 公有变量定义 Java 的定义方式 class Test{ pu ...
- Python中的类变量和成员变量
类变量 定义 在类里面定义,且不位于构造或者成员函数里面,同时没有" self. " 的前缀:或者在类外定义,用 类名.类变量名 来新增加类变量. 使用 两种使用方法: (1)类名 ...
- Python类变量,实例变量,类方法,实例方法,静态方法的分析
Python作为动态语言,跟静态语言如c/c++有很大区别,其中的一个重要的特性就是Python的变量无需声明直接可用.同样,类的成员变量无需声明,直接可用.目的是为了动态语言跟灵活,在思路想到的时候 ...
- java 堆、栈、方法区/ 类变量、成员变量、局部变量
方法区:类信息.类变量(静态变量和常量).方法 堆:对象.成员变量 栈:局部变量 (1)当程序运行时,首先通过类装载器加载字节码文件,经过解析后装入方法区!在方法区中存了类的各种信息,包括类变量.类常 ...
- 关于python类变量和实例变量
今天在看python的类和实例的时候,突然发现了一个以前遗漏的点,也就是类变量和实例变量.首先需要理解一下类变量和实例变量的概念. 类全局变量:在类中定义,对类和由类生成的实例生效,如果通过方法对类变 ...
- Java类变量和成员变量初始化过程
一.类的初始化 对于类的初始化:类的初始化一般只初始化一次,类的初始化主要是初始化静态成员变量. 类的编译决定了类的初始化过程. 编译器生成的class文件主要对定义在源文件中的类进行了如下的更改: ...
- Python的类变量和成员变量、类静态方法和类成员方法
先说明几个相关的术语:attribute.function.method. attribute:类对象的数据成员.我们经常会在Python代码出错时遇到:“AttributeError: 'My_Cl ...
随机推荐
- 对于filter的理解
filter语法:使用filter会创建一个新数组,所以原数组不变 array.filter(function(value,index,arr), thisValue) 其中:arr:数组(可选) i ...
- Java 常用类-程序员头大的日期时间API
第二节.日期时间API 一.JDK8之前日期时间API 1.1 java.lang.System类 System类提供的public static long currentTimeMillis()用来 ...
- RT Thread的SPI设备驱动框架的使用以及内部机制分析
注释:这是19年初的博客,写得很一般,理解不到位也不全面.19年末得空时又重新看了RTThread的SPI和GPIO,这次理解得比较深刻.有时间时再整理上传. -------------------- ...
- Java 客户端操作 FastDFS 实现文件上传下载替换删除
FastDFS 的作者余庆先生已经为我们开发好了 Java 对应的 SDK.这里需要解释一下:作者余庆并没有及时更新最新的 Java SDK 至 Maven 中央仓库,目前中央仓库最新版仍旧是 1.2 ...
- JVM 第三篇:Java 类加载机制
本文内容过于硬核,建议有 Java 相关经验人士阅读. 1. 什么是类的加载? 类的加载指的是将类的 .class 文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个 ...
- chattr 和 lsattr 命令详解
lsattr 命令 lsattr 命令用于查看文件的第二扩展文件系统属性. 语法: lsattr(选项)(参数) 选项: -E:可显示设备属性的当前值,但这个当前值是从用户设备数据库中获得的,而不是从 ...
- Vue结合Django-Rest-Frameword结合实现登录认证(二)
作者:小土豆biubiubiu 博客园:https://www.cnblogs.com/HouJiao/ 掘金:https://juejin.im/user/2436173500265335 微信公众 ...
- Activiti6.0获取下一节点任务的心路历程
在我的开发任务中,我被分配了一个像下一个节点审批人发送短信的任务,这个任务看起来非常的简单,但在开发过程中遇到了许多的坑,在这里进行记录,如果你想要快速知道结果,请看代码版本(3). 首先,就是获取下 ...
- openresty上安装waf
一,查看openresty的当前版本 [root@localhost luacache]# /usr/local/openresty/bin/openresty -V nginx version: o ...
- jquery $.ajax 获取josn数据
<script type="text/javascript" src="jquery-1.9.1.js"></script> <s ...