#3 Python面向对象(二)
前言
上一节主要记录面向对象编程的思想以及Python类的简单创建,这节继续深入类中变量的相关知识,Here we go!
Python中类的各种变量
1.1 类变量
类变量定义:在类中,在函数体(方法)外的变量称为类变量。类变量在整个类中是公用的
类变量初始化:按照以上定义,类变量的初始化如下
- class Doctor:
- '''
- 类变量的初始化
- '''
- salary = 100 # salary为类变量
- def talk():
- print('I am a doctor')
类变量访问:因为类变量在整个类中是公用的,所以在不同的环境下都能访问。在类中函数体外直接使用 类变量 访问;在类中函数体内使用 类.类变量 或者 实例.类变量 访问;在类外使用 类.类变量 或者 实例.类变量访问
- class Doctor:
- '''
- 在类中函数体外访问类变量salary
- '''
- salary = 100
- print(salary)
- def talk(self):
- print('I am a doctor')
- lisi = Doctor() # 一旦实例化后,就会自动按顺序执行类中函数体外的代码
- # 运行结果:
- 100
- class Doctor:
- '''
- 在类中函数体内访问类变量salary
- '''
- salary = 100
- def talk0(self):
- '''
- 使用类.类变量访问
- '''
- print('My salary is {0}'.format(Doctor.salary))
- def talk1(self):
- '''
- 使用实例.类变量访问
- '''
- print('My salary is {0}'.format(self.salary))
- lisi = Doctor()
- lisi.talk0()
- lisi.talk1()
- # 运行结果:
- My salary is 100
- My salary is 100
- class Doctor:
- '''
- 在类外访问类变量salary
- '''
- salary = 100
- def talk(self):
- print('I am a doctor')
- lisi = Doctor()
- print(Doctor.salary) # 使用 类.类变量 访问
- print(lisi.salary) # 使用 实例.类变量 访问
- # 运行结果:
- 100
- 100
1.2 实例变量
实例变量定义:在类中,在函数体(方法)内的变量称为实例变量。
实例变量初始化:按照上面定义,实例变量的初始化如下
- class Doctor:
- '''
- 初始化实例变量
- '''
- def talk(self):
- self.sentence = 'I am man' # self.sentence 为实例变量
实例变量访问:实例变量在整个类中并不是公用的,所以其访问范围有限。在类中函数体内使用 实例.实例变量 访问;在类外使用 实例.实例变量 访问
- class Doctor:
- '''
- 类中函数体内的访问
- '''
- def talk(self):
- self.sentence = 'I am man' # 初始化实例变量self.sentence
- print(self.sentence) # 访问实例变量
- lisi = Doctor()
- lisi.talk() # 调用talk方法
- # 运行结果:
- I am man
- class Doctor:
- '''
- 类外访问实例变量
- '''
- def talk(self):
- self.sentence = 'I am man' # 初始化实例变量self.sentence
- lisi = Doctor()
- lisi.talk() # 必须先执行talk方法才能访问talk方法里面的实例变量
- print(lisi.sentence) # 类外访问实例变量
1.3 类变量、实例变量与全局变量、局部变量的异同点
在Python基础教程中讲解了全局变量与局部变量的相关知识,本节提到的两个变量与它们有什么异同呢?
绝对来说,类变量与实例变量都是局部变量
相对来说,在类中,类变量相当于全局变量,但实例变量并不相当于局部变量,更不相当于全局变量
相对来说,在实例中,类变量和实例变量都相当于全局变量
- 相对来说,在类中的方法里,才有局部变量,初始化的时候不是定义 实例.实例变量 ,而是直接定义 变量
一下子说的这么复杂难以理解,举个栗子
#3 Python面向对象(二)的更多相关文章
- python面向对象(二)——类成员
Python面向对象 类成员 1.字段 普通字段 属于对象 静态字段 属于类 2.方法 普通方法 触发者是对象 括号里至少一个参数 se ...
- python面向对象二
1.1类的静态属性,类方法,类的静态方法 1.1.1静态属性(@property) 在类中: python内置的@property装饰器就是负责把一个方法(函数)变成属性来调用. class Stud ...
- python 面向对象二 类和实例
一.类和实例 面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法, ...
- Python 面向对象(二) 特殊方法
一些Python特殊方法的汇总 __bases__ 类的基类,返回元祖__base__ 类的基类,也叫父类__call__ '类名()',类名加括号调用时执行的语句__class__ 对象或类 ...
- python面向对象(二)
属性查找 类有两种属性:数据属性和函数属性 1. 类的数据属性是所有对象共享的 2. 类的函数属性是绑定给对象用的 class BeijingStudent: school='Beijing' ...
- python 面向对象(二)--访问限制
在Class内部,可以有属性和方法,而外部代码可以通过直接调用实例变量的方法来操作数据,这样,就隐藏了内部的复杂逻辑. 但是,从前面Student类的定义来看,外部代码还是可以自由地修改一个实例的na ...
- python 面向对象(二)成员
##################################总结########################### 类的成员: 变量: 实例变量 对象.属性=xxx 类变量 ...
- Python 面向对象二(转载)
来源:www.cnblogs.com/wupeiqi/p/4766801.html 三.类成员的修饰符 类的所有成员在上一步骤中已经做了详细的介绍,对于每一个类的成员而言都有两种形式: 1.公有成员, ...
- 四十一、python面向对象二
A.成员: 1.字段:静态字段(每个对象都有同一字段),普通字典(每个对象都有不同的数据) 2.方法:静态方法(无需使用对象的内容),类方法,普通方法(使用对象中的数据) 3.特性:普通特性(将方法伪 ...
- Python自动化开发 - 面向对象(二)
本节内容 1.isinstance(obj,cls)和issubclass(sub,super) 2.反射 3.__setattr__,__delattr__,__getattr__ 一. isins ...
随机推荐
- BZOJ_3282_Tree_LCT
BZOJ_3282_Tree_LCT Description 给定N个点以及每个点的权值,要你处理接下来的M个操作. 操作有4种.操作从0到3编号.点从1到N编号. 0:后接两个整数(x,y),代表询 ...
- BZOJ2751 [HAOI2012]容易题
Description 为了使得大家高兴,小Q特意出个自认为的简单题(easy)来满足大家,这道简单题是描述如下: 有一个数列A已知对于所有的A[i]都是1~n的自然数,并且知道对于一些A[i]不能取 ...
- shell脚本中cd命令无效
对于一段包含cd 命令的shell脚本(test.sh): #!/bin/bash cd .. mkdir ./test 运行: sh ./test.sh 脚本运行时无法在上级目录建立test文件 此 ...
- 基于Token认证的多点登录和WebApi保护
在文章中有错误的地方,或是有建议或意见的地方,请大家多多指正,邮箱: linjie.rd@gmail.com 一天张三,李四,王五,赵六去动物园,张三没买票,李四制作了个假票,王五买了票,赵六要直接F ...
- 解决VS2019中.net core WPF 暂时无法使用 Designer 的临时方法
目录 解决 VS2019 中.net core WPF 暂时无法使用 Designer 的临时方法 安装 vs 2019 professional/enterprise版本 在vs的设置里,勾选.NE ...
- 广州三本找Java实习经历
前言 只有光头才能变强 这阵子跑去面试Java实习生啦~~~我来简单介绍一下背景吧. 广州三本大三在读,在广州找实习.大学开始接触编程,一个非常平庸的人. 在学习编程时,跟我类似的人应该会有一个疑问: ...
- Snapde一个全新的CSV超大文件编辑软件
今天介绍如果数据量超过104万行Excel无法打开了,用什么软件可以打开呢?Snapde,一个专门为编辑超大型数据量CSV文件而设计的单机版电子表格软件:它在C++语言开发的Snapman多人协作电子 ...
- C:\Program Files\Java\jdk1.7.0_79\bin\java.exe'' finished with non-zero exit value 1
转载请标明出处:https://www.cnblogs.com/tangZH/p/10538982.html 今天,在项目过程中碰到了这个奇怪的问题,C:\Program Files\Java\jdk ...
- CenOS_文件目录类操作命令
1.pwd 基本语法: pwd (功能描述:显示当前工作目录的绝对路径) 2.ls 基本语法: ls [选项] [目录或是文件] 常用选项: -a :显示当前目录所有的文件和目录,包括隐藏的. -l ...
- uboot的驱动模型理解
uboot的驱动模型,简称dm, 具体细节建议参考./doc/driver-model/README.txt 关于dm的三个概念: uclass:一组同类型的devices,uclass为同一个gro ...