在类中,根据变量定义的位置不同,以及定义的方式不同,类属性又可以细分为以下三种类型:

  1. 类体中,所有函数之外:类属性(类变量)
  2. 类体中,所有函数内部,以“self.变量名”的方式定义的变量:实例属性(实例变量)
  3. 类体中,所有函数内部,以“变量名 = 变量值”的方式定义的变量:局部变量

1.类变量

所有类的实例化对象都同时共享类变量。类变量的调用方法有两种,既可以使用类名直接调用,也可以使用类的实例化对象调用(此方法不推荐使用)。

class Person:
name = "xiaobai"
age = 10
def __init__(self, name, age):
self.name = name
self.age = age
#使用类名直接调用
print(Person.name)
print(Person.age)
#通过类名修改类变量的值
Person.name = "lilei"
Person.age = 20
print(Person.name)
print(Person.age)
#执行结果
xiaobai
10
lilei
20

2.实例变量

只作用于调用方法的对象。实例变量只能通过对象名访问,无法通过类名访问。

class Person:
def __init__(self):
self.name = "xiaobai"
self.age = 10
def say(self):
self.content = "i love python"
#name、age以及content都是实例变量。Person类的类对象都会包含name和age实例变量,只有调用了say()方法的类对象才会包含content实例变量。
mary = Person()
print(mary.name)
print(mary.age)
mary.say()
print(mary.content)
#执行结果
xiaobai
10
i love python
实例变量和类变量可以同名,但这种情况下使用类对象无法调用类变量,它会首选实例变量。
class Person:
name = "lilei"
def __init__(self):
self.name = "xiaobai"
self.age = 10
def say(self):
self.content = "i love python"
mary = Person()
print(mary.name)
#执行结果
xiaobai

3.局部变量

局部变量只能用于所在函数中,函数执行完成后,局部变量也会被销毁。

python类属性和实例属性(类变量和实例变量)的更多相关文章

  1. python类可以任意添加属性

    python类可以任意添加属性 class A(object): def __init__(self): self.name = "zhangsan" self.age = 18 ...

  2. python 类和对象的属性

    python类和对象的属性分为类属性和对象属性两大类,类属性属于类,而对象属性属于对象. 1. 父类的对象属性会被子类的对象继承. 2. 父类的类属性会被子类继承,还是作为类属性,如果父类改变了类属性 ...

  3. python 类中的公有属性 私有属性 实例属性

    class parent(): i=1 __j=2 class child(parent): m=3 __n=4 def __init__(self,age,name): self.age=age s ...

  4. Python类总结-字段,方法,属性区别及StaticMethod, Property,私有字段和私有属性

    类包含下列 静态属性 动态属性 静态方法 动态方法 class Province: #静态字段--属于类,调用方法类.字段名 memo = "中国23个省之一" #动态字段--属于 ...

  5. python的局部变量,全局变量,类变量,实例变量

    定义: a.全局变量:在模块内.在所有函数外面.在class外面,这就是全局变量. b.局部变量:在函数内.在class的方法内(未加self修饰的),这就是局部变量. c. 静态变量:在class内 ...

  6. Python中面向对象的一些关于类变量与实例变量的理解

    1. 要写出有意义的面向对象的代码,最核心的:类.对象.三大特性:继承.封装.多态 类变量与实例变量: class Student(): # 类变量 name = '张' age = 0 def __ ...

  7. Python类和实例方法和属性的动态绑定

    python中实例创建后可以给实例绑定任何属性和方法 class Student(object): pass 给实例绑定一个属性: s=Student() s.name='Michel' print ...

  8. python中函数和方法区别,以及如何给python类动态绑定方法和属性(涉及types.MethodType()和__slots__)

    网上有很多同义但不同方式的说法,下面的这个说法比较让你容易理解和接受 与类和实例无绑定关系的function都属于函数(function): 与类和实例有绑定关系的function都属于方法(meth ...

  9. Python类总结-封装(私有属性,方法)

    封装基础 广义上面向对象的封装:代码的保护,面向对象的思想本身就是一种封装 只让自己的对象能调用自己类中的方法 狭义上的封装-面向对象三大特性之一(私有变量,用公有的方法封装私有属性,方法叫封装) 把 ...

  10. python 类实例化,修改属性值

    class User(object): def __init__(self, first_name, last_name, login_attempts): self.first_name = fir ...

随机推荐

  1. linux 使用 gdb

    gdb 对于看系统内部是非常有用. 在这个级别精通调试器的使用要求对 gdb 命令有信心, 需要理解目标平台的汇编代码, 以及对应源码和优化的汇编码的能力. 调试器必须把内核作为一个应用程序来调用. ...

  2. dotnet Framework 源代码 · Ink

    本文是分析 .NET Framework 源代码的系列,主要告诉大家微软做笔迹用的思路,怎么做的笔迹才是高性能的,用户体验比较好的.我会告诉大家源代码的思想,当然这个文章会比较无聊.如果你是想做笔迹的 ...

  3. vuejs 数据视图不更新

    由于 JavaScript 的限制,Vue 不能检测对象属性的添加或删除 可以使用 Vue.set(object, key, value) 方法向嵌套对象添加响应式属性 数组 this.$set(ar ...

  4. 苹果笔记本修改pycharm for mac 修改字体大小

    实在是隐藏的太深了,无语

  5. AI炼丹 - 深度学习必备库 numpy

    目录 深度学习必备库 - Numpy 1. 基础数据结构ndarray数组 1.1 为什么引入ndarray数组 1.2 如何创建ndarray数组 1.3 ndarray 数组的基本运算 1.4 n ...

  6. 超简单本地mock假数据测试,模拟后台数据返回必杀技

    温馨提示:急性子可以直接拉到最后观看方法步骤. 什么是mock? mock就是在开发过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试开发的方法. 使用mock有什么好处? ...

  7. SQLServer数据库之SqlServer查看表、存储过程、耗时查询、当前进程、开销较大的语句

    --查看数据库中表的语句 SELECT s2.dbid , DB_NAME(s2.dbid) AS [数据库名] , --s1.sql_handle , ( , ( ( THEN ( LEN(CONV ...

  8. LeetCode 1 Two Sum——在数组上遍历出花样

    本文始发于个人公众号:TechFlow   今天是周末,和大家一起来看一道算法题.这道题是大名鼎鼎的LeetCode的第一题,也是面试当中非常常见的一道面试题.题目不难,但是对于初学者来说应该还是很有 ...

  9. 记springboot + MP +Hikari动态数据源配置

    环境准备: springboot 2.1.6 mybatis-plus 数据库驱动 boot 自带hikari驱动 步骤1:  导入多数据源启动工具类 <!-- 多数据源支持 -->< ...

  10. Unity3D小游戏开发之两个我踩过的坑

    最近在开发一个植物大战僵尸小游戏,今天写了一早上的代码,踩了两个坑,这两个坑的位置分别位于触发器和数据转换,写这篇博文以此来让其他程序员不要再去踩这两个坑. 1.我在做简易僵尸模型的时候,这个僵尸模型 ...