Python与java、c++等都被视为一种面向对象的语言。通过创建自定义类,用于处理各种业务逻辑。面向对象有封装、继承、多态三个特征,这也是面子对象语言的通用特征。

1 封装

  封装,是值向外部隐藏内部不必要的具体实现。

2 继承

  继承,是值通过一次创建类,而以后再次创建的类与该类的方法有重合的,可以使用继承,这样就避免了再次编写,减少了代码的冗余。python支持多继承。

3 多态

  多态,值能够同样的对不同的类型的对象调用相同的方法。

4 类

  类,表示一组对象,每个对象都属于特定的类。如果一个类B继承了A类,辣么A类就称为B类的超类,B类超为A类的子类

  4.1 类的创建

  python通过关键字class来创建类。如:

  __metaclass__ = type  #如果你使用的python 2,创建类时请包涵这行代码

  class Person:

    num = 0  #num表示类属性(关于类属性和对象属性等下会讲解)

    def set_name(self,name):

      self.name = name

    def get_name(self):

      return self.name

  这样一个类就定义好了。类的主要任务是定义其实例将要包含的方法。不知道小伙伴们注意到没,这上面的每个方法都包含一个self参数,这个参数有什么用?表示什么呢?   在python中,对于类中定义的方法,都会对有一个参数自动传递给它们,该参数是指向对象本事的,在调用的时候不必传入该值,一般将其命名为self。显然,如果方法没有self参数,辣么将无法访问对象本身。

  4.2 属性(类属性、对象属性)

  属性主要分为类属性和对象属性,也可叫为全部属性和局部属性。这两个属性主要区别是作用域不用,类属性将关联到类上,任何对象调用该属性,将访问到同一地址空间,对象属性知名其意,就是将属性关联到对象,与类无关,每个对象对其访问修改不会影响其他对象的值。如:

  # 上面的Person类中,num表示类属性,name为对象属性

  person1 = Person()

  person2 = Person()

  Person.num = 100

  print(person1.num)  ——> 100
  print(person2.num)  ——> 100

  person1.set_name('小明')
  person2.set_name('小张')

  print(person1.get_name())  ——> 小明
  print(person2.get_name())  ——> 小张

  类属性必须对其修改必须使用  类名.属性名  来进行修改,访问可使用 类名.属性名 或者 对象名.属性名

  4.3 封装

  在python中,要让方法或属性成为私有的(不能从外部直接访问),只需让其名称以两个下划线打头即可。如:__name、__accessible(self)。虽然以两个下划线打头有点儿怪异,但这样的方法类似与其他语言中的私有方法(如java中的private)。然而,幕后的处理手法却不怎么引人入目:在类定义中,对所有以两个下划线打头的名称都进行相应转换,即在开头加上一个下划线和类名。即你可以这样调用方法__classname__accessible(),但是并不应该这样做。

  总之,你无法禁止别人访问对象的私有方法和属性,但这种名称修改方式发出了强烈的信号,让他们不要这样做。

  如果你不希望名称被修改,有想发出不要从外部修改属性或方法的信号,可用一个下划线打头。这虽然只是一种约定,但也有作用。例如,from modul import *不会导入以一个下划线打头的名称。

  4.4 继承

  python通过在class语句中的类名后加上超类名,并用圆括号()包括,多个超类用逗号 ( , ) 隔开。在一个类中,如果一个类有多个超类以不同方式实现了同一个方法(即有多个同名的方法),必须在class语句中小心排列这些超类,因为位于前面的类的方法将覆盖位于后面的类的该方法。

  class PersonA(Person):

    pass

  class PersonB(PersonA, ..., ....):

    pass

  要确定一个类是否是另一个类的子类,可用内置方法issubclass(classname1, classname2)

  要想知道一个类的基类,也就是超类,可访问特殊属性__bases__。

  要想知道一个对象是否是该类的实例,可使用isinstance(obj1, classname)

  要想知道一个对象属于哪个类,可使用特殊属性__class__。

5 抽象基类

  抽象基类是不能实例化的类,即不能创建该类对象,其最大职责是定义子类应该实现的一组抽象方法。如:

  from abc impot ABC, abstractmethod

  class Person(ABC):

    @abstractmethod

    def a(self):

      pass

6 相关方法

  getattr(obj, name[, default])     获取属性的值,可提供默认值

  setattr(obj, name, value)         将对象的指定属性设置为指定的值

  type(object)              返回对象的类型

  

python学习笔记(六)、类的更多相关文章

  1. python学习笔记4_类和更抽象

    python学习笔记4_类和更抽象 一.对象 class 对象主要有三个特性,继承.封装.多态.python的核心. 1.多态.封装.继承 多态,就算不知道变量所引用的类型,还是可以操作对象,根据类型 ...

  2. Python学习笔记六

    Python课堂笔记六 常用模块已经可以在单位实际项目中使用,可以实现运维自动化.无需手工备份文件,数据库,拷贝,压缩. 常用模块 time模块 time.time time.localtime ti ...

  3. Python学习笔记 - day7 - 类

    类 面向对象最重要的概念就是类(Class)和实例(Instance),比如球类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同.在Python中,定义类 ...

  4. python学习笔记六--用户自定义类

    一.类: 1. 面向对象. 2. 定义了新的对象类型. 定义了两个属性:name,pay 定义了两个方法:lastName,giveRaise

  5. python学习笔记六 面向对象相关下(基础篇)

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

  6. python学习笔记六 初识面向对象上(基础篇)

    python面向对象   面向对象编程(Object-Oriented Programming )介绍   对于编程语言的初学者来讲,OOP不是一个很容易理解的编程方式,虽然大家都知道OOP的三大特性 ...

  7. python学习笔记1-元类__metaclass__

    type 其实就是元类,type 是python 背后创建所有对象的元类   python 中的类的创建规则: 假设创建Foo 这个类 class Foo(Bar): def __init__(): ...

  8. Python学习笔记12—类

    典型的类和调用方法: #!/usr/bin/env Python # coding=utf-8 __metaclass__ = type #新式类 class Person: #创建类 def __i ...

  9. Python 学习笔记 - 10.类(Class) 1

    定义 Python 的 Class 比较特别,和我们习惯的静态语言类型定义有很大区别. 1. 使用一个名为 __init__ 的方法来完成初始化.2. 使用一个名为 __del__ 的方法来完成类似析 ...

随机推荐

  1. 34 文件地理数据库(GDB)变文件夹了怎么办

    我们都知道文件地理数据库(GDB)是ArcGIS软件特有的格式,有其独特的设计之处,在文件资源管理器中显示为.gdb的文件夹,但是里面的文件却看不明白,而且将gdb文件夹在Windows资源管理器中直 ...

  2. MS SQL计算最大公约数和最小公倍数函数

    /*求两个数的最大公约数*/ CREATE FUNCTION f_GetGys ( @num1 BIGINT , @num2 BIGINT ) RETURNS BIGINT AS BEGIN DECL ...

  3. Revisiting Network Support for RDMA

    重新审视RDMA的网络支持 本文为SIGCOMM 2018会议论文. 笔者翻译了该论文.由于时间仓促,且笔者英文能力有限,错误之处在所难免:欢迎读者批评指正. 本文及翻译版本仅用于学习使用.如果有任何 ...

  4. 算法与数据结构(六) 迪杰斯特拉算法的最短路径(Swift版)

    上篇博客我们详细的介绍了两种经典的最小生成树的算法,本篇博客我们就来详细的讲一下最短路径的经典算法----迪杰斯特拉算法.首先我们先聊一下什么是最短路径,这个还是比较好理解的.比如我要从北京到济南,而 ...

  5. React Native组件、生命周期及属性传值props详解

    创建组件的三种方式 第一种:通过ES6的方式创建 /** * 方式一 :ES6 */ export default class HelloComponent extends Component { r ...

  6. Spring使用支付宝扫码支付

    前一段一直在研究支付宝的扫码支付,不得不说,支付宝的文档写的真是一个烂(起码在下刚开始看的时候是mengbi的).文档上面的示例和demo里面的示例长的完全不一样.往往文档上面的例子很简单,而demo ...

  7. [Swift]LeetCode791. 自定义字符串排序 | Custom Sort String

    S and T are strings composed of lowercase letters. In S, no letter occurs more than once. S was sort ...

  8. vs2013+opencv3.2配置

    opencv库在3.0以后分为opencv库和opencv_contrib库两部分,其中opencv_contrib库是一个扩展库,如果需要使用SIFT和SURF算法就需要安装这个扩展库,否则只用安装 ...

  9. TortoiseSVN客户端的使用说明

    1 安装TortoiseSVN客户端 准备安装文件,TortoiseSVN-1.6.16.21511-x64-svn-1.6.17.msi,双击进行安装,按照提示步骤安装,安装完成后需重启计算机,SV ...

  10. Volatile的那些事

    上一篇中,我们了解了Synchronized关键字,知道了它的基本使用方法,它的同步特性,知道了它与Java内存模型的关系,也明白了Synchronized可以保证"原子性",&q ...