一、自定义类

1、属性与方法

格式:

class classname:

  def __init__(self,a,b):

   self.a=a

    self.b=b

  def ...

>一般都有一个__init__函数来定义属于这个类的参数,前后都被"__"包围的函数为特殊方法

;以"__"开头的变量只能读,不能写,相当于private数据。

>如果重新实现str,repr等方法,值应使用表象形式:

def __str__(self):

return "({0.a!r},{0.b!r})".format(self)

>如果调用一个类的方法,python就会自动在类树中进行回溯,如果一直找不到就会产生一个AttributeError.

>在方法前加super()表示调用基类的方法,总是调用super().__init__()是一个种合理的做法。

>自定义类的所有实例都支持==,这种比较总是返回False,通过对特殊方法__eq__()进行重新实现,__ne__()也会跟着自动实现。

>如果我们希望避免不适当的比较,可以使用断言(如:assert isinstance(other,Point));也可以用产生TypeError异常来声明不支持这两个对象的比较操作(如:if not isinstance(other,Point):raise TypeError());方法三:if not isinstance(other,Point):return NotImplem-emted,但只有在类只对比较特殊方法进行了重新实现才可能返回NotImplemented。

>isinstance()为内置的函数,以一个对象与一个类(或类构成的元组)为参数,如果对象属于给定的类,或基类,就返回True。

>object提供的比较的特殊方法:__lt__(),__le__(),__eq__(),__ne__(),__ge__(),__gt__()。

2、继承与多态

class classname2(classname):

  def __init__(self)

  ...

classname2是classname的继承类。

多态:给定类的任意对象在使用时都可以看作该类的任意某个基类的对象。

3、使用特性进行属性的存取控制

修饰器(decorator):是一个函数,该函数以一个函数或方法为参数,并返回参数“修饰后”版本。使用修饰器以@符号引导来进行标记。

例(用内置的property()函数对a的属性进行修饰,使a必须为大于0的数):

@property

def a(self):

return self.__a

@a.setter

def a(self,a):

assert a>0,"a must be nonzero and non-negative"

self.__a=a

每个创建的特性都包含getter,setter,deleter等属性。

4、创建完全整合的数据类型

对于不想要的来自于基类的方法,可以用raise Error的来取消这些方法的使用。对于要同时取消多个类的情况,可以借助内置的exec()函数来实现,它会动态地执行从给定对象传递来的代码。

二、自定义组合类

组合类型的特殊方法:

__contains__(self,x) x in y

__delitem__(self,k) del y[k]

__getitem__(self,k) y[k]

__iter__(self)          for x in y :pass 返回序列中y中的项或映射y中键的迭代子

__len__(self)          len(y)

__reversed__(self)  reversed(y)

__setitem__(self,k,v)      y[k]=v

对于赋值=后边的值也可以用or,如果第一个值为False,则使用or后边的值(a= b or 3)。

Python3 面向对象程序设计(类)的更多相关文章

  1. python3 面向对象编程--类的封装和继承

    #python3import refrom urllib import requestimport os class PosterSpider(object):     def __init__(se ...

  2. python3 面向对象、类、继承、组合、派生、接口、子类重用父类方法

    对象是特征(变量)与技能(函数)的结合体而类是一系列对象共同的特征与技能的集合体 class teacher: lesson = "python" def __init__(sel ...

  3. [Python学习笔记][第六章Python面向对象程序设计]

    1月29日学习内容 Python面向对象程序设计 类的定义与使用 类定义语法 使用class关键词 class Car: def infor(self): print("This is ca ...

  4. JavaScript中的面向对象程序设计

    本文内容目录顺序: 1.Object概念讲述: 2.面向对象程序设计特点: 3.JavaScript中类和实例对象的创建: 4.原型概念: 5.原型API: 6.原型对象的具体使用:7.深入理解使用原 ...

  5. Python基础(16)_面向对象程序设计(类、继承、派生、组合、接口)

    一.面向过程程序设计与面向对象程序设计 面向过程的程序设计:核心是过程,过程就解决问题的步骤,基于该思想设计程序就像是在设计一条流水线,是一种机械式的思维方式 优点:复杂的问题的简单化,流程化 缺点: ...

  6. 第7章 Python类型、类、协议 第7.1节 面向对象程序设计的相关知识

    Python被视为一种面向对象的语言,在介绍Python类相关的内容前,本节对面向对象程序设计相关的概念进行简单介绍. 一.    类和对象(实例) 在面向对象的程序设计(OOP)过程中有两个重要概念 ...

  7. [.net 面向对象程序设计深入](1)UML——在Visual Studio 2013/2015中设计UML类图

    [.net 面向对象程序设计深入](1)UML——在Visual Studio 2013/2015中设计UML类图 1.UML简介 Unified Modeling Language (UML)又称统 ...

  8. [.net 面向对象程序设计进阶] (13) 序列化(Serialization)(五) Json 序列化利器 Newtonsoft.Json 及 通用Json类

    [.net 面向对象程序设计进阶] (13) 序列化(Serialization)(五) Json 序列化利器 Newtonsoft.Json 及 通用Json类 本节导读: 关于JSON序列化,不能 ...

  9. [.net 面向对象程序设计进阶] (11) 序列化(Serialization)(三) 通过接口 IXmlSerializable 实现XML序列化 及 通用XML类

    [.net 面向对象程序设计进阶] (11) 序列化(Serialization)(三) 通过接口 IXmlSerializable 实现XML序列化 及 通用XML类 本节导读:本节主要介绍通过序列 ...

随机推荐

  1. JVM学习笔记二:JVM参数

    所有线程共享的内存主要有两块:堆内存和方法区. 其中堆内存分为两块:新生代Young generation(Eden区.From Survivor区.To Survivor区).老年代Tenured ...

  2. 学java网络编程的心得体会

    网络编程简单思路 一.发送端1创建udp服务,通过DatagramSocket对象;2确定数据,封装成包DatagramPacket(byte[] buf, int length, InetAddre ...

  3. java面向对象--包及访问控制符

    多人开发同一个项目时,会出现类名称相同的情况.package就是为了避免类或接口名称重复而采用的一种措施.实际上包就是有一定层次结构的文件夹,*.class文件要保存当前类声明的和包对应的文件夹中. ...

  4. JavaScript 闭包究竟是什么

    用JavaScript一年多了,闭包总是让人二丈和尚摸不着头脑.陆陆续续接触了一些闭包的知识,也犯过几次因为不理解闭包导致的错误,一年多了 资料也看了一些,但还是不是非常明白,最近偶然看了一下 jQu ...

  5. Linux系统下安装Mysql5.7.18教程收集分享

    本人最近服务器新手入门,需要搭建一个在linux虚拟机上的服务器 第一天再装虚拟机,选的linux系统CentOS,一切顺利. 第二天,要给虚拟机装Mysql,但是需要用到命令行进行安装/操作等,我是 ...

  6. 项目管理之 SVN 管理软件 CornerStone for Mac

    常用的项目管理有 Git 和 SVN.之前公司一直使用的是 Git,使用的是 SourceTree 客户端,据说 Git 比 SVN 要好,只能说各有特点吧,有兴趣的可以查看下两个的区别. 下面是学习 ...

  7. python小工具:用python操作HP的Quality Center (二)----- 用异步方式提高速度

    上接第一篇 http://www.cnblogs.com/sdet/p/6874631.html 在python中,很简单地能把http请求通过异步的方式发送,以下代码在python 3.6.0上运行 ...

  8. 从零开始的JS生活(二)——BOM、DOM与JS中的事件

    上回书说道,JS中变量.运算符.分支结构.循环和嵌套循环等内容.本回就由本K给大伙唠唠JS中的BOM.DOM和事件. 一."花心大萝卜"--BOM 1.震惊,FFF团为何对BOM举 ...

  9. 我做的第一个程序(菜鸟的java课堂笔记)

    内存: 堆区,栈区,常量区,计数区,代码区: 数据类型: 基本数据类型:整形,浮点型,布尔型 boolean 只能返回真假值,字符型: 引用数据类型:类,数组: 基本数据类型-->直接存放到栈区 ...

  10. Javascript事件模型(二):Javascript事件的父元素和子元素

    DOM事件标准定义了两种事件流,分别是捕获和冒泡.默认情况下,事件使用冒泡事件流,不使用捕获事件流.你可以指定使用捕获事件流,方法是在注册事件时传入useCapture参数,将这个参数设为true. ...