#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_2527_[Poi2011]Meteors_整体二分
BZOJ_2527_[Poi2011]Meteors_整体二分 Description Byteotian Interstellar Union (BIU) has recently discover ...
- BZOJ_3932_[CQOI2015]任务查询系统_主席树
BZOJ_3932_[CQOI2015]任务查询系统_主席树 题意: 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei,P ...
- 记一次MySQL数据库拒绝访问的解决过程
问题背景 用wordpress搭博客,数据库采用MySQL.为了调试方便,创建账户my_account ,允许它从任意主机访问数据库. CREATE USER `my_account`@'%' IDE ...
- mpvue 小程序开发爬坑汇总
<!-- 小程序的爬坑记录 --> 1 微信小程序之动态获取元素宽高 var obj=wx.createSelectorQuery(); 2 微信小程序图片自适应 <image cl ...
- React 虚拟 DOM 的差异检测机制
React 使用虚拟 DOM 将计算好之后的更新发送到真实的 DOM 树上,减少了频繁操作真实 DOM 的时间消耗,但将成本转移到了 JavaScript 中,因为要计算新旧 DOM 树的差异嘛.所以 ...
- Java8新特性之二:方法引用
上一节介绍了Java8新特性中的Lambda表达式,本小节继续讲解Java8的新特性之二:方法引用.方法引用其实也离不开Lambda表达式. 1.方法引用的使用场景 我们用Lambda表达式来实现匿名 ...
- SpringBoot进阶教程(二十四)整合Redis
缓存现在几乎是所有中大型网站都在用的必杀技,合理的利用缓存不仅能够提升网站访问速度,还能大大降低数据库的压力.Redis提供了键过期功能,也提供了灵活的键淘汰策略,所以,现在Redis用在缓存的场合非 ...
- 使用Keepalived构建LVS高可用集群
LVS的DR模型配置+Keepalive部署 介绍 下图为DR模型的通信过程,图中的IP不要被扑结构中的IP迷惑,图里只是为了说明DR的通信原理,应用到本例中的拓扑上其工作原理不变. 拓扑结构 服务器 ...
- Python进阶:如何将字符串常量转化为变量?
前几天,我们Python猫交流学习群 里的 M 同学提了个问题.这个问题挺有意思,经初次讨论,我们认为它无解. 然而,我认为它很有价值,应该继续思考怎么解决,所以就在私密的知识星球上记录了下来. 万万 ...
- 马蜂窝搜索基于 Golang 并发代理的一次架构升级
搜索业务是马蜂窝流量分发的重要入口.很多用户在使用马蜂窝时,都会有目的性地主动搜索与自己旅行需求相关的各种信息,衣食住行,事无巨细,从而做出最符合需求的旅行决策. 因此在马蜂窝,搜索业务交互的下游模块 ...