一,类的属性

(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第七周:面向对象进阶(需修改)的更多相关文章

  1. 从零开始学Python第六周:面向对象基础(需修改)

    标签(空格分隔): 面向对象 一,面向对象基础 (1)面向对象概述 面向过程:根据业务逻辑从上到下写代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类 ...

  2. 从零开始学Python第0周:Python基本介绍(部分内容来源于网络)

    Python入门介绍 一,Python的基本介绍 (1)概要 Python是一种解释型,面向对象,动态数据类型的高级程序设计语言.常被广泛用于处理系统管理任务和web编程.现如今Python已经成为了 ...

  3. 从零开始学Python第八周:网络编程基础(socket)

    Socket网络编程 一,Socket编程 (1)Socket方法介绍 Socket是网络编程的一个抽象概念.通常我们用一个Socket表示"打开了一个网络链接",而打开一个Soc ...

  4. 从零开始学Python网络爬虫PDF高清完整版免费下载|百度网盘

    百度网盘:从零开始学Python网络爬虫PDF高清完整版免费下载 提取码:wy36 目录 前言第1章 Python零基础语法入门 11.1 Python与PyCharm安装 11.1.1 Python ...

  5. 如何从零开始学Python?会玩游戏就行,在玩的过程就能掌握编程

    现在学习编程的人很多,尤其是python编程,都列入高考了,而且因为人工智能时代的到来,编程也将是一门越来越重要的技能. 但是怎么从零开始学python比较好呢?其实,你会玩游戏就行. 从零基础开始教 ...

  6. 简学Python第七章__class面向对象高级用法与反射

    Python第七章__class面向对象高级用法与反射 欢迎加入Linux_Python学习群  群号:478616847 目录: Python中关于oop的常用术语 类的特殊方法 元类 反射 一.P ...

  7. 从零开始学python

    自从20世纪90年代初Python语言诞生至今,它已被广泛应用于系统管理任务的处理和Web编程.今天就来给大家看看学Python的五大优势吧! NO.1 全球三大主流编程语言之一 python是一种面 ...

  8. python(24)- 面向对象进阶

    面向对象基础知识: 1.面向对象是一种编程方式,此编程方式的实现是基于对类和对象的使用: 2.类是一个模板,模板中包装了多个‘函数’供使用(可以将多函数中公用的变量封装到对象中): 3.对象,根据模板 ...

  9. 从零开始学Python第一周:Python基础(上)

    Python语法基础(上) 一,Python的变量 (1)创建变量 变量的含义:存储信息的地方 创建变量并赋值 x = 1 print x x = 123 #再次赋值 print x (2)使用变量 ...

随机推荐

  1. 小型单文件NoSQL数据库SharpFileDB初步实现

    小型单文件NoSQL数据库SharpFileDB初步实现 我不是数据库方面的专家,不过还是想做一个小型的数据库,算是一种通过mission impossible进行学习锻炼的方式.我知道这是自不量力, ...

  2. JS实战 · 级联菜单选择省份和城市(两种)

    DOM编程步骤.思路 1.定义界面:      通过html标签将数据进行封装: 2.定义一些静态样式:      利用css: 3.需要动态地完成的和用户的交互:      a:明确事件源:     ...

  3. 完全移除TFS2013的版本控制

    环境:Vs2103(TFS2013) 目的:去掉别人项目里的TFS控制,因为每次打开时会有提示信息 解决方法: 1.删除隐藏的.$tf文件夹,搜索*.vssscc和*.vspscc这两个后缀的文件,删 ...

  4. window系统JDK1.7的快速配置

    快速配置java环境变量 右键单击计算机--->属性 点击 "高级系统设置"--->"环境变量",出现环境变量设置窗口 系统变量--->新建 ...

  5. junit测试,使用classpath和file 加载文件的区别

    用junit测试发现一个问题,怎么加载配置文件?一直都出现这样的错误 ERROR: org.springframework.test.context.TestContextManager - Caug ...

  6. PLSQL使用技巧

    PL/SQL Developer记住登陆密码    在使用PL/SQL Developer时,为了工作方便希望PL/SQL Developer记住登录Oracle的用户名和密码: 设置方法:PL/SQ ...

  7. Unix及类Unix系统文本编辑器的介绍

    概述 Vim是一个类似于Vi的著名的功能强大.高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性.VIM是纯粹的自由软件. Vim普遍被推崇为类Vi编辑器中最好的一个,事实上真正的劲敌来自Em ...

  8. LINQ系列:Linq to Object相等操作符

    相等操作符通过比较两个序列来检查它们相应的元素是否相同.如果两个序列有相同的元素,并且对应元素的值相同,则认为这两个序列是相等的. SequenceEqual操作符判定两个集合是否相等.判定是通过并行 ...

  9. C#设计模式系列:原型模式(Prototype)

    1.原型模式简介 1.1>.定义 原型模式(Prototype)用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象. 1.2>.使用频率 中 1.3>.原型模式应用 首先 ...

  10. 深入学习jQuery选择器系列第五篇——过滤选择器之内容选择器

    × 目录 [1]contains [2]empty [3]parent[4]has[5]not[6]header[7]lang[8]root 前面的话 本文介绍过滤选择器中的内容选择器.内容选择器的过 ...