类变量与成员变量

关注公众号“轻松学编程”了解更多。

​ 在类中声明的变量我们称之为类变量【静态成员变量】,
在__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类变量与成员变量的更多相关文章

  1. Python 类变量和成员变量

    Python 类变量和成员变量 类与对象的方法 我们已经讨论了类与对象的功能部分,现在我们来看一下它的数据部分.事实上,它们只是与类和对象的名称空间 绑定 的普通变量,即这些名称只在这些类与对象的前提 ...

  2. Python 类变量,成员变量,静态变量,局部变量

    局部 class TestClass(object): val1 = 100 def __init__(self): self.val2 = 200 def fcn(self,val = 400): ...

  3. Python类变量与实例变量及成员函数修饰方式说明(与Java定义方式进行类比)

    Python类中的变量有类变量和实例变量之分. 类变量:变量绑定在类上,同一个类之间的共享变量,类比于Java中的静态变量static 公有变量定义 Java 的定义方式 class Test{ pu ...

  4. Python中的类变量和成员变量

    类变量 定义 在类里面定义,且不位于构造或者成员函数里面,同时没有" self. " 的前缀:或者在类外定义,用 类名.类变量名 来新增加类变量. 使用 两种使用方法: (1)类名 ...

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

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

  6. java 堆、栈、方法区/ 类变量、成员变量、局部变量

    方法区:类信息.类变量(静态变量和常量).方法 堆:对象.成员变量 栈:局部变量 (1)当程序运行时,首先通过类装载器加载字节码文件,经过解析后装入方法区!在方法区中存了类的各种信息,包括类变量.类常 ...

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

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

  8. Java类变量和成员变量初始化过程

    一.类的初始化 对于类的初始化:类的初始化一般只初始化一次,类的初始化主要是初始化静态成员变量. 类的编译决定了类的初始化过程. 编译器生成的class文件主要对定义在源文件中的类进行了如下的更改: ...

  9. Python的类变量和成员变量、类静态方法和类成员方法

    先说明几个相关的术语:attribute.function.method. attribute:类对象的数据成员.我们经常会在Python代码出错时遇到:“AttributeError: 'My_Cl ...

随机推荐

  1. pycharm 配置 github

    今天突然想把自己的代码上传到github上去,然后就研究了下pycharm的配置. 首先呢,你得有个github的账号,然后建立一个项目. 然后打开pycharm,选择file->Setting ...

  2. CentOS7的下载及虚拟机的创建

    一.CentOS的安装 1,首先打开开源镜像网站:www.mirrors.163.com(网易开源镜像网站),www.mirrors.aliyun.com(阿里云开源镜像网站) 以网易为例 2.点击进 ...

  3. Java知识系统回顾整理01基础06数组03排序

    一.选择法排序 选择法排序的思路: 把第一位和其他所有的进行比较,只要比第一位小的,就换到第一个位置来 比较完后,第一位就是最小的 然后再从第二位和剩余的其他所有进行比较,只要比第二位小,就换到第二个 ...

  4. 【漏洞复现】Office远程代码执行漏洞(CVE-2017-11882)

    昨晚看到的有复现的文章,一直到今天才去自己复现了一遍,还是例行记录一下. POC: https://github.com/Ridter/CVE-2017-11882/ 一.简单的生成弹计算器的doc文 ...

  5. Arduino 串行外设接口——W3Cschool

    来源:https://www.w3cschool.cn/arduino/arduino_serial_peripheral_interface.html Arduino 串行外设接口 由 drbear ...

  6. c#类(class)

    类 类的定义是以关键字class开始的,后面跟类的名称,类的主题包含一个花括号里,下面是类定义的一般格式. <access specifier> class class_name { // ...

  7. .NET Standard 简介

    系列目录     [已更新最新开发文章,点击查看详细] .NET Standard 是一套正式的 .NET API 规范,有望在所有 .NET 实现中推出. 推出 .NET Standard 的背后动 ...

  8. ubuntu 18.04 搭建flask服务器(大合集,个人实操)

    ubuntu 18.04 搭建flask服务器(大合集) Ubuntu python flask 服务器 本次使用的Ubuntu版本为:Ubuntu 18.04.5 LTS (GNU/Linux 4. ...

  9. git 上传文件到 gitee 码云远程仓库

    一 , 想将码云仓库里面的代码,抓取下来 1.git remote add origin 地址 2. git remote -v 3. it pull  origin master 二 , 将自己创建 ...

  10. Kafka单机安装

    一.Kafka简介 Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写.Kafka是一种高吞吐量的 分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作 ...