Python类定义字类变量与实例变量

2023-05-16

Python类中定义的变量分为类变量和实例变量(也叫成员变量、对象变量),类变量直接定义在类里面(不在函数里面),前面不会有一个self修饰;相反,实例变量大都定义在实例函数里面,通过“self.变量名”的方式进行定义。

当然,也有例外,应该类变量和实例变量都可以在类定义之后在定义(这个功能让我目瞪口呆)。

一、类变量及实例变量的定义

先看看正常的:

class Person():
    person = 'alive' #这是类变量
    def __init__(self,name ,age):
        self.name = name #这是实例变量
        self.age = age   #这是实例变量
        self.gender = '男' #这是实例变量
        #a = 456     #不能写这里,会出错
    place = ['地球','中国'] #这是类变量

从上述代码也可以看出,Python定义类时,不对定义类变量与实例变量之间的顺序做出约束,也可以看出类变量不能定义在函数体里面。

再来看看返厂的,也就是在类定义之后在定义变量:

class Student():#创建一个空的类
    pass

#Student
s1 = Student()
#为p1添加一个name属性
s1.name = 'chb' #这个name属性是一个实例变量
print(s1.name) #输出结果:chb
#为Person类添加一个类变量
Student.behavior = 'study' #这是一个类变量
print(Student.behavior)#输出结果:study
print(s1.behavior)#输出结果:study

所以说,Python类的定义是很自由的,对于变量,既可以在定义类时定义,也可以在类定义完成之后定义。上述两块代码讲述了类变量和实例变量在定义上面的区别。下面说说类变量与实例变量在使用上的区别。

二、类变量与实力变量的使用

结合上述第一个代码块中定义的Person类进行说明。

1. 类变量可以通过“类名.类变量名”、“实例名.类变量名”两种方式读取,即类和实例都能读取类变量。

if __name__=="__main__":
    p = Person('chb' , 18)
    print(Person.person)#输出结果:alive
    print(p.person)     #输出结果:alive

2实例变量只能通过“实例名.实例变量名”的方式访问,类无权访问实例名。

if __name__=="__main__":
    p = Person('chb' , 18)
    print(p.name)#输出结果:chb
    print(Person.name)     #错误:AttributeError: type object 'Person' has no attribute 'name'

3. “类名.类变量名”、“实例名.类变量名”访问的实际上是同一个命名空间的变量,所以类变量具有“一改全改”的特点。

if __name__=="__main__":
    p = Person('chb' , 18)
    Person.person = 'die'
    print(p.person)#输出结果:die
    print(Person.person)  #输出结果:die

4. 采用‘实例名.类变量名’的方式对类变量进行赋值时,若该类变量是可变数据类型,则可以成功赋值该类变量,否则会在该实例变量所在的名称空间中创建一个与该类变量同名的实例变量进行赋值,并不会对类变量进行赋值,此时也无法再通过‘实例名.类变量名’的方式读取该类变量。但若‘实例名.类变量名’赋值的是可变数据类型,则可以对类变量进行赋值操作。

if __name__=="__main__":
    p = Person('chb' , 18)
    p.person = 'die'
    print(p.person)#输出结果:die
    print(p.__dict__)#输出结果:{'gender': '男', 'person': 'die', 'age': 18, 'name': 'chb'}
    print(Person.person)  #输出结果:alive
    p.place[1] = '北京'
    print(p.place)#输出结果:['北京' , '北京']
    print(Person.place)#输出结果:['北京' , '北京']

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python类定义字类变量与实例变量 的相关文章

随机推荐

  • 洛谷题解P1002_过河卒

    题目描述 棋盘上 A点有一个过河卒 xff0c 需要走到目标 B点 卒行走的规则 xff1a 可以向下 或者向右 同时在棋盘上 C点有一个对方的马 xff0c 该马所在的点和所有跳跃一步可达的点称为对方马的控制点 因此称之为 马拦过河卒 棋
  • 关于NAND代码搬移和跳转到SDRAM的理解

    NAND开始将前4KB代码通过硬件搬移到SRAM中执行 xff0c 这4KB代码中包括一段将NAND全部代码搬移到SDRAM中的代码 xff08 全部代码也包括全面4KB xff09 xff0c 在搬移完成后 xff0c 程序执行到其中一个
  • python 动态导入模块和类

    import importlib module 61 39 db DB 39 if isinstance module str module 61 importlib import module module DBObj 61 getatt
  • mongodb 获取集合所有记录中曾出现过的字段

    switch to the db you 39 re using and type mr 61 db runCommand 34 mapreduce 34 34 myCollectionName 34 34 map 34 function
  • JS 闭包的 9 大经典使用场景

    1 返回值 xff08 最常用 xff09 1 返回值 最常用的 function fn var name 61 34 hello 34 return function return name var fnc 61 fn console l
  • 彻底搞懂JS闭包各种坑

    闭包是js开发惯用的技巧 xff0c 什么是闭包 xff1f 闭包指的是 xff1a 能够访问另一个函数作用域的变量的函数 清晰的讲 xff1a 闭包就是一个函数 xff0c 这个函数能够访问其他函数的作用域中的变量 eg function
  • Anaconda 阿里镜像

    简介 Anaconda是一个用于科学计算的Python发行版 xff0c 支持Linux Mac Windows 包含了众多流行的科学计算 数据分析的Python包 下载地址 xff1a https mirrors aliyun com a
  • python 执行shell 并输出

    def run shell self shell 34 34 34 执行shell并随时打印输出 34 34 34 cmd 61 subprocess Popen shell stdin 61 subprocess PIPE stderr
  • 【Mongo】shell命令行模式执行mongo命令

    例子 xff1a mongo host 172 31 36 77 port 27017 u admin p 39 HpyD9KAd JDkHRY9 39 admin eval 34 db currentOp 34 1 交互式 mongo s
  • 【LeetCode】124. 二叉树中的最大路径和

    题目链接 xff1a 124 二叉树中的最大路径和 题目描述 xff1a 思路 xff1a 这类题目一般可以通过dfs方式完成 xff0c 首先我们明白 xff0c 想要获取这棵二叉树中的最大路径和 xff0c 那么我们需要知道以每个节点为
  • 变更数据捕获(CDC)

    从广泛意义上说 xff0c 全球许多企业每天都需要通过频繁的数据批量处理与加载 xff0c 来定期将数据从一个数据库迁移到另一个数据库 或数据仓库 这类定期批量加载的工作 xff0c 往往既耗费时间 xff0c 又会消耗原始系统的大量处理能
  • C++ string 是否以‘\0’结尾 讨论

    之前在某篇文章中看到 xff0c C语言字符串是以 39 0 39 结尾的 xff0c 但是C 43 43 string类型的字符串并不是以 39 0 39 结尾 话不多说 xff0c 直接放代码 xff08 Cygwin64环境g 43
  • 无法打开内核设备“\.\VMCIDev\VMX”: 操作成功完成。是否在安装 VMware Workstation 后重新引导? 模块“DevicePowerOn”启动失败。 未能启动虚拟机。

    在 VMware 的 vmx 文件中 xff0c vmci0 present 控制虚拟机是否包含 VMCI 设备 如果该参数设置为 true xff0c 则表示虚拟机包含 VMCI 设备 xff1b 如果设置为 false xff0c 则表
  • Docker 推荐使用阿里源

    34 registry mirrors 34 34 https 2h3po24q mirror aliyuncs com 34
  • kali中执行history -c报错

    报错内容 xff1a 34 fc event not found c 34 报错原因 xff1a kali 默认的 shell 环境已经从 bash 更改为 zsh xff0c 而history c需要在bash环境下运行 清除历史命令方法
  • kali安装OpenVAS

    openVAS从10版本后改名GVM xff0c 这里用的kali系统也是2020年的最新系统 安装之前将kali的源换成国内的源 xff0c 像阿里源或中科大源 位置 etc apt sources list 命令 xff1a leafp
  • kali 消除chrome的unlock keyring弹窗

    每次kali上安装chrome后会出现unlock keyring非常烦人 xff0c 在网上找教程也没找到 xff0c 只要ubuntu的按照ubuntu的教程 xff0c 稍加改动后成功解决 安装chrome后 xff0c 第一次打开c
  • 在理解通用逼近定理之前,你都不会理解神经网络

    神经网络力量背后的证据 从字面上看 xff0c 通用近似定理是神经网络起作用的理论基础 简而言之 xff0c 它声明了一个神经网络 xff0c 其中具有一个包含足够但有限数量的神经元的隐藏层 xff0c 可以在激活函数的某些条件下 即 xf
  • 如何获取 Docker 容器的 IP 地址

    1 进入容器内部后 1 cat etc hosts 会显示自己以及 link 软连接的容器IP 2 使用命令 1 2 3 4 5 docker inspect format 39 NetworkSettings IPAddress 39 l
  • Python类定义字类变量与实例变量

    Python类中定义的变量分为类变量和实例变量 xff08 也叫成员变量 对象变量 xff09 xff0c 类变量直接定义在类里面 xff08 不在函数里面 xff09 xff0c 前面不会有一个self修饰 xff1b 相反 xff0c