从零开始学Python第七周:面向对象进阶(需修改)
一,类的属性
(1)示例
通过属性获取已经创建对象的个数
class Plane:
pCount = 0 #类属性
def __init__(self,name,category):
self.name = name
self.category = category #实例属性
Plane.pCount += 1 print ('已生产,Plane.pCount,'架飞机')
p1 = Plane('平安','播音777')
print ('已生产',PlanepCount,'架飞机') #输出属性
print ('已生产',p1.pCount,'架飞机')
p1.pCount += 1 #变更实例属性值
print('已生产',p1.pCount,'架飞机')
print('已生产',Plane.pCount,'架飞机')
(2)属性
类属性
@与类绑定,不依赖于对象,又称为静态属性
@不需要实例化对象
@类和其对象都可以访问获取其值实例属性
@存在于对象中
@必须先创建对象,再访问获取其值
@每一个不同的对象都有属于自己的实例属性值

当通过对象访问某个属性时,解释器会先尝试在实例命名空间中寻找。如果找不到,就会去类属性中查找
(3)类属性
在类体中声明,并初始化
访问方式
@类名.属性
@对象名.属性class Plane:
pCount = 0 #声明pCount,并赋初值
def __init__(self):
Plane.pCount += 1 #新创建1个对象,其值自增1
print ('已生产,Plane.pCount,'架飞机')
p1 = Plane()
print ('已生产',PlanepCount,'架飞机') #通过类名获得值
print ('已生产',p1.pCount,'架飞机')
类属性属于类自身,对象仅在没有同名实例属性时才能访问它
类和对象都可以访问类属性,但对象只能读取、不能修改类属性的值
当试图通过对象给类属性赋值时,解释器会理解为:给对象p1的pCount属性赋值
如果对象p1没有pCount属性,会自动的给对象p1创建一个与类属性同名的实例属性
因此,p1.pCount属性与Plane.pCount不是同一属性
(4)实例属性
- 多种声明方式
@_init _()声明,并初始化
@通过赋值语句声明,并赋值

- 对象可以访问类属性,但类不能访问实例属性

(5)获得类属性信息 - 内置函数
@dir():返回类属性列表 - 类的字典属性__dict_ _:返回一个字典
@键是属性名
@值是相应的属性对象的数据值

(6)特殊的类属性 - 每个类都具有内置属性
- 使用点运算符“.”可以访问
- 常用的类属性

(7)特殊的实例属性 - 常用的内置函数


二,类的方法
(1)示例
程序中有多条相同的输出语句,代码重复

可否提取形成一个新的方法,且调用方法时不依赖类的对象?
(2)方法实例方法:
(self,参数列表)
@与类绑定,依赖对象
@在类中声明定义
@必须先创建对象,再调用执行
@类对象可以调用执行
- 类方法:
@classmethod
类方法(cls,参数列表)
- 静态方法
@与类方法相似
@staticmethod
静态方法名(参数列表)

(3)类方法
- 语法
- 通过装饰器“@classmethod”通知解释器是类方法
- 第1个参数cls表示当前类
- cls是隐含参数,调用方法时不需传入实参
(4)示例1 - 抽取输出代码形成一个类方法

(5)静态方法 - 语法
@staticmethod
静态方法名(参数列表)
- 通过装饰器“@staticmethod”通知解释器是静态方法
- 没有隐含参数
(6)示例2 - 抽取输出代码形成一个静态方法

(7)类方法与静态方法比较 - 相同点
@与类绑定,不依赖于对象
@不需实例化对象
@类和其对象都可以调用执行 - 不同点

**三,类的特殊成员 **
我们都知道类名后边加圆括号调用的是类的init方法:如下

那么,对象后边加括号调用的是什么方法呢?
(1)__call__方法

(2)__str__方法
我们知道当对象实例化以后,通过对象加“.”来调用类的实例属性,那么直接输出对象的话是什么值呢?

一串地址看着太费劲,也看不出来啥东西,一点意义也没有,那么能不能换成别的呢?


(3)__getitem__方法
我们明白了小括号对对象的作用以后,那么我们想一个问题,以前咱们学过的字典取值和列表取值等,列表的名字其实都是一个个的对象,那么后边的中括号又是做什么用的呢?对象+[]又是调用的什么方法呢?
我们应该还记得列表还有一种切片取值的方法,那么这个是怎么实现呢?
(4)__setitem__方法
我们明白了字典列表取值是调用的getitem方法,那么赋值呢?

(5)__delitem__方法
我们记得字典有一个del+对象【】的删除的方式,这个是怎么实现的呢?

从零开始学Python第七周:面向对象进阶(需修改)的更多相关文章
- 从零开始学Python第六周:面向对象基础(需修改)
标签(空格分隔): 面向对象 一,面向对象基础 (1)面向对象概述 面向过程:根据业务逻辑从上到下写代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类 ...
- 从零开始学Python第0周:Python基本介绍(部分内容来源于网络)
Python入门介绍 一,Python的基本介绍 (1)概要 Python是一种解释型,面向对象,动态数据类型的高级程序设计语言.常被广泛用于处理系统管理任务和web编程.现如今Python已经成为了 ...
- 从零开始学Python第八周:网络编程基础(socket)
Socket网络编程 一,Socket编程 (1)Socket方法介绍 Socket是网络编程的一个抽象概念.通常我们用一个Socket表示"打开了一个网络链接",而打开一个Soc ...
- 从零开始学Python网络爬虫PDF高清完整版免费下载|百度网盘
百度网盘:从零开始学Python网络爬虫PDF高清完整版免费下载 提取码:wy36 目录 前言第1章 Python零基础语法入门 11.1 Python与PyCharm安装 11.1.1 Python ...
- 如何从零开始学Python?会玩游戏就行,在玩的过程就能掌握编程
现在学习编程的人很多,尤其是python编程,都列入高考了,而且因为人工智能时代的到来,编程也将是一门越来越重要的技能. 但是怎么从零开始学python比较好呢?其实,你会玩游戏就行. 从零基础开始教 ...
- 简学Python第七章__class面向对象高级用法与反射
Python第七章__class面向对象高级用法与反射 欢迎加入Linux_Python学习群 群号:478616847 目录: Python中关于oop的常用术语 类的特殊方法 元类 反射 一.P ...
- 从零开始学python
自从20世纪90年代初Python语言诞生至今,它已被广泛应用于系统管理任务的处理和Web编程.今天就来给大家看看学Python的五大优势吧! NO.1 全球三大主流编程语言之一 python是一种面 ...
- python(24)- 面向对象进阶
面向对象基础知识: 1.面向对象是一种编程方式,此编程方式的实现是基于对类和对象的使用: 2.类是一个模板,模板中包装了多个‘函数’供使用(可以将多函数中公用的变量封装到对象中): 3.对象,根据模板 ...
- 从零开始学Python第一周:Python基础(上)
Python语法基础(上) 一,Python的变量 (1)创建变量 变量的含义:存储信息的地方 创建变量并赋值 x = 1 print x x = 123 #再次赋值 print x (2)使用变量 ...
随机推荐
- 到底应该选择那种Linux.NET的部署方式?
当前部署Linux.NET环境的方式可谓是五花八门,既有传统的源码编译的方式.又有各式各样的一键安装脚本.还有绿色包安装方式,而随着Mono官方的新站上线,更增加了采用RPM包的部署方式.那对于一名L ...
- 一则spring容器启动死锁问题(DefaultListableBeanFactory/DefaultSingletonBeanRegistry)
线上发现一个问题,应用在启动时会卡死,log上并没有什么异常输出,初判应该是死锁问题. 抓现场的thread dump文件, 确实是有两个线程有deadlock问题. 线程一 "HSFBiz ...
- T型及Fly_by拓扑之应用总结
前面的文章有分别介绍过T型拓扑及Fly_by拓扑结构,这两种拓扑结构应用最多的应该是在DDR3里面,说到这里,小编又想开始聊聊DDR3的设计了,我想很多人都比较有兴趣. 因为DDR3的设计还是比较复杂 ...
- iOS-技巧性总结
1.AFN与ASI对比 -- AFN1. 基于 NSURLConnection & NSURLSession 进行的封装2. 使用简单3. 提供了自动的序列化 & 反序列化支持! AF ...
- 谈谈JAR
JAR(Java Archive File) JAR 文件格式以流行的 ZIP 文件格式为基础. 与 ZIP 文件不同的是,JAR 文件不仅用于压缩和发布,而且还用于部署和封装库.组件和插件程序,并可 ...
- 【求助】WPF 在XP下 有的Textbox光标会消失
最近做个项目,一直有一个问题没有解决,就是在XP下,有的Textbox里在文本框里没有东西的时候,会没有光标.不同的XP机器,失去光标的Textbox也不一样. 各位大师看下面的三张图,当Textbo ...
- C#中的readonly与const的比较
C#中有两种常量类型,分别为readonly(运行时常量)与const(编译时常量),本文将就这两种类型的不同特性进行比较并说明各自的适用场景.工作原理 readonly为运行时常量,程序运行时进行赋 ...
- JavaScript 中的类方法,对象方法,Prototype方法
<script type="text/javascript"> function baseClass() { this.showMsg = function() { a ...
- 掌握 Cinder 的设计思想 - 每天5分钟玩转 OpenStack(46)
上一节介绍了 Cinder 的架构,这节讨论 Cinder 个组件如何协同工作及其设计思想. 从 volume 创建流程看 cinder-* 子服务如何协同工作 对于 Cinder 学习来说,Volu ...
- ASP.NET MVC 混搭 ASP.NET WebForms 所导致的 Html.ActionLink/BeginForm 问题
首先,需要了解下这篇博文:<ASP.NET WebForms MapPageRoute 路由配置> 之前,在 ASP.NET MVC 中混搭 ASP.NET WebForms,使用 Map ...

