浅析Python面向对象编程

概述

很多人接触Python,都是从爬虫开始,其实很多语言都可以做爬虫,只是Python相对其他语言来说,更加简单而已。但是Python并不止于爬虫,在人工智能,科学计算等方面的应用更加广泛。古人云:万丈高楼平地起,要想有长足的发展,打好基础很重要,本文主要讲解Python的面向对象相关知识,仅供学习分享使用,如有不足之处,还请指正。

面向对象的特征

类:用来描述相同事物的特征的集合,如:Person 类,表示人,具有人的属性和特征。
对象:通过类定义的具体的实例,如:zhangsan 表示一个具体的人。
继承:是指派生类继承基类的方法和属性,并具有自己属性和特征,如:Man是Person的子类。
封装:隐藏数据和实现细节,提供对外访问方法。
多态:一个基类,可以有多个派生类,可以有不同的形态。
抽象:抛开细节,只关注本质特征的过程。
以上是面向对象的基本特征,那么Python在面向对象方面是如何做的呢?

创建类

如下所示:

  • 使用 class 语句来创建一个新类,class 之后为类的名称并以冒号结尾。
  • Python的类,没有大括号表示类的内容范围,而是通过缩进来实现。
  • 类的成员方法和普通方法的区别是,方法定义的第一个参数是self,表示类的实例,但在调用时不需要。
  • 其中__init__方法为类的初始化方法,当声明对象时,会调用对应的方法。
  • 其中__del__方法为析构函数,当类被释放时调用。
class Employee:
  """员工类"""
  emp_count = 0 # 变量是一个类变量,它的值将在这个类的所有实例之间共享

  def __init__(self, name, salary):
    """初始化"""
    self.name = name
    self.salary = salary
    Employee.emp_count += 1

  def display_count(self):
    """显示数量"""
    print('Total Employee =', Employee.emp_count)

  def display_employee(self):
    """显示信息"""
    print('name =', self.name, ', salary = ', self.salary)

  def prt(self):
    """打印自己"""
    print(self)
    print(self.__class__)

  def __del__(self):
    """析构函数"""
    print(self, '被释放了')

创建对象

Python创建对象,不需要new关键字,类似于函数的调用,和Java及.Net不同。如下所示:

 '创建第一个对象'
 emp = Employee('Jack', 20)
 emp.display_count()
 emp.display_employee()
 emp.prt()

动态添加与删除对象属性

对象的属性可以动态添加,这点与编译型语言不同,如下所示:

 emp.age = 17 # 添加一个 'age' 属性
 emp.age = 28 # 修改 'age' 属性
 del emp.age # 删除 'age' 属性

也可以通过Python的内置方法来添加和获取属性,如下所示:

print(getattr(emp, 'name')) # 获取属性
print(hasattr(emp, 'age')) # 是否包含属性
setattr(emp, 'age', 18) # 设置属性和值
print(hasattr(emp, 'age')) # 是否包含属性
print(getattr(emp, 'age')) # 获取属性
delattr(emp, 'age') # 删除属性
print(hasattr(emp, 'age')) # 是否包含属性

Python也有内置类的一些属性,如下所示:

 # 内置对象
 print("Employee.__doc__:", Employee.__doc__)
 print("Employee.__name__:", Employee.__name__)
 print("Employee.__module__:", Employee.__module__)
 print("Employee.__bases__:", Employee.__bases__)
 print("Employee.__dict__:", Employee.__dict__)

类的属性与方法

  • 类的私有属性,以双下划线开头,只可以在类内部通过self进行访问。
  • 类的protected属性,以下划线开头,只允许子类和自身调用。
  • 在类的内部,使用 def 关键字可以为类定义一个方法,与一般函数定义不同,类方法必须包含参数 self,且为第一个参数
  • 类的私有方法:以两个下划线开头,声明该方法为私有方法,不能在类的外部调用。在类的内部调用 self.__private_methods

如下所示:

class JustCounter:
  """类描述"""
  __secretCount = 0 # 类的私有变量
  publicCount = 0 # 公开变量

  def count(self):
    self.__secretCount += 1
    self.publicCount += 1
    print('私有变量:', self.__secretCount)

Python不允许实例化的类访问私有数据,但你可以使用 object._className__attrName( 对象名._类名__私有属性名 )访问属性,如下所示:

print(counter._JustCounter__secretCount)

类的继承

面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制。通过继承创建的新类称为子类或派生类,被继承的类称为基类、父类或超类。

  • Python中的继承通过 class 子类名(父类名): 的格式实现。
  • 子类可以调用父类的方法和定义自己的方法。
  • 如果父类方法的功能不能满足需求,子类可以重写(overrides)父类的方法。

如下所示:Parent表示一个父类,拥有自己的属性和方法。

class Parent:
  """定义父类"""
  parentAttr = 100

  def __init__(self):
    print('调用父类的构造函数')

  def parentMethod(self):
    print('调用父类方法')

  def setAttr(self, attr):
    Parent.parentAttr = attr

  def getAttr(self):
    print('父类属性:', Parent.parentAttr)

  def myMethod(self):
    print('我是父类的MyMethod')

Child表示一个子类,继承自Parent,如下所示:

class Child(Parent):
  """定义子类"""

  def __init__(self):
    print('调用子类的构造方法')

  def childMethod(self):
    print('调用子类方法')

  def myMethod(self):
    """重写Overrides父类方法"""
    print('我是子类的MyMethod')

  def __str__(self):
    """重写方法,适合人阅读"""
    return 'str方法返回'

子类的实例化

如下所示:

 c = Child() # 实例化子类对象
 c.childMethod() # 调用子类方法
 c.parentMethod() # 调用父类方法
 c.setAttr(200) # 再次调用父类方法,设置属性
 c.getAttr() # 再次调用父类方法 获取属性
 c.myMethod() # 调用的是子类的MyMethod
 

可以通过内置函数,判断子类与类的关系,如下所示:

 print(issubclass(Child, Parent)) # 判断是否是对应的父子关系
 print(isinstance(c, Child)) # 判断是否是实例对象
 print(isinstance(c, Parent)) # 判断是否是实例对象

以上就是浅析Python面向对象编程的详细内容,更多关于Python面向对象编程的资料请关注我们其它相关文章!

(0)

相关推荐

  • Python面向对象编程之继承与多态详解

    本文实例讲述了Python面向对象编程之继承与多态.分享给大家供大家参考,具体如下: Python 类的继承 在OOP(Object Oriented Programming)程序设计中,当我们定义一个class的时候,可以从某个现有的class 继承,新的class称为子类(Subclass),而被继承的class称为基类.父类或超类(Base class.Super class). 我们先来定义一个class Person,表示人,定义属性变量 name 及 sex (姓名和性别): 定义一

  • Python中的面向对象编程详解(下)

    继承 继承描述了基类的属性如何"遗传"给派生类.一个子类可以继承它的基类的任何属性,不管是数据属性还是方法. 创建子类的语法看起来与普通(新式)类没有区别,一个类名,后跟一个或多个需要从其中派生的父类: 复制代码 代码如下: class SubClassName (ParentClass1[, ParentClass2, ...]):     'optional class documentation string'     class_suite 实例 复制代码 代码如下: clas

  • Python中的面向对象编程详解(上)

    创建类 Python 类使用 class 关键字来创建.简单的类的声明可以是关键字后紧跟类名: 复制代码 代码如下: class ClassName(bases):     'class documentation string' #'类文档字符串'     class_suite #类体 实例化 通过类名后跟一对圆括号实例化一个类 复制代码 代码如下: mc = MyClass() # instantiate class 初始化类 'int()'构造器 def __int__(self):  

  • 举例讲解Python面向对象编程中类的继承

    python创建一个类很简单只需要定义它就可以了. class Cat: pass 就像这样就可以了,通过创建子类我们可以继承他的父类(超类)的方法.这里重新写一下cat class Cat: name = 'cat' class A(Cat): pass print A.name # cat 经典类 我们也可以这样,让A多继承. class Cat: name = 'cat' class Dog: name = 'dog' class A(Cat, Dog): pass print A.nam

  • 如何理解python面向对象编程

    类是面向对象程序设计的一部分.面向对象程序设计或者简称为 OOP 致力于创建可重用代码块称之为类.当你想在你的程序中使用类时,你会从类中创建一个对象,这也是面向对象一词的由来.Python 并不总是面向对象的,但是你会在你的项目中用到对象.为了理解类,你需要理解面向对象的一些基础术语. 常用术语 class:类.类是代码块的主体,其中定义了建立的模型的属性和行为.这个模型可以来自于真实世界,也可以是虚拟游戏等. attribute:属性.是一系列信息的集合.在类中,一个属性通常是一个变量. be

  • 谈一谈基于python的面向对象编程基础

    活在当下的程序员应该都听过"面向对象编程"一词,也经常有人问能不能用一句话解释下什么是"面向对象编程",我们先来看看比较正式的说法. 把一组数据结构和处理它们的方法组成对象(object),把相同行为的对象归纳为类(class),通过类的封装(encapsulation)隐藏内部细节,通过继承(inheritance)实现类的特化(specialization)和泛化(generalization),通过多态(polymorphism)实现基于对象类型的动态分派.

  • Python面向对象编程基础实例分析

    本文实例讲述了Python面向对象编程基础.分享给大家供大家参考,具体如下: 1.类的定义 Python中类的定义与对象的初始化如下,python中所有类的父类是object,需要继承. 由于Python是动态语言,因此可以直接为对象添加属性并赋值而不必在类定义中声明 class Person(object): # 定义一个Person类 pass p = Person() # 初始化一个Person对象 p.name="xiaoming" # 对象属性赋值 Python的类初始化方法

  • Python3.5面向对象编程图文与实例详解

    本文实例讲述了Python3.5面向对象编程.分享给大家供大家参考,具体如下: 1.面向过程与面向对象的比较 (1)面向过程编程(procedural programming) 面向过程编程又被称为:top-down languages,程序从上到下 一步步执行,从头到尾的解决问题. 基本设计思路为:程序一开始是解决一个大问题,然后把大问题分解成多个小问题或子过程,这些小问题执行的时候再继续分解, 直到小问题足够简单到可以在一个小范围内解决. 缺点:若程序要进行修改,则修改的部分依赖的各个部分也

  • 浅析Python面向对象编程

    概述 很多人接触Python,都是从爬虫开始,其实很多语言都可以做爬虫,只是Python相对其他语言来说,更加简单而已.但是Python并不止于爬虫,在人工智能,科学计算等方面的应用更加广泛.古人云:万丈高楼平地起,要想有长足的发展,打好基础很重要,本文主要讲解Python的面向对象相关知识,仅供学习分享使用,如有不足之处,还请指正. 面向对象的特征 类:用来描述相同事物的特征的集合,如:Person 类,表示人,具有人的属性和特征. 对象:通过类定义的具体的实例,如:zhangsan 表示一个

  • Python面向对象编程基础解析(二)

    Python最近挺火呀,比鹿晗薛之谦还要火,当然是在程序员之间.下面我们看看有关Python的相关内容. 上一篇文章我们已经介绍了部分Python面向对象编程基础的知识,大家可以参阅:Python面向对象编程基础解析(一),接下来,我们看看另一篇. 封装 1.为什么要封装? 封装就是要把数据属性和方法的具体实现细节隐藏起来,只提供一个接口.封装可以不用关心对象是如何构建的,其实在面向对象中,封装其实是最考验水平的 2.封装包括数据的封装和函数的封装,数据的封装是为了保护隐私,函数的封装是为了隔离

  • Python面向对象编程基础解析(一)

    1.什么是面向对象 面向对象(oop)是一种抽象的方法来理解这个世界,世间万物都可以抽象成一个对象,一切事物都是由对象构成的.应用在编程中,是一种开发程序的方法,它将对象作为程序的基本单元. 2.面向对象与面向过程的区别 我们之前已经介绍过面向过程了,面向过程的核心在'过程'二字,过程就是解决问题的步骤,面向过程的方法设计程序就像是在设计一条流水线,是一种机械式的思维方式 优点:复杂的问题简单化,流程化 缺点:扩展性差 主要应用场景有:Linux内核,git,以及http服务 面向对象的程序设计

  • Python面向对象编程中的类和对象学习教程

    Python中一切都是对象.类提供了创建新类型对象的机制.这篇教程中,我们不谈类和面向对象的基本知识,而专注在更好地理解Python面向对象编程上.假设我们使用新风格的python类,它们继承自object父类. 定义类 class 语句可以定义一系列的属性.变量.方法,他们被该类的实例对象所共享.下面给出一个简单类定义: class Account(object): num_accounts = 0 def __init__(self, name, balance): self.name =

  • 关于Python面向对象编程的知识点总结

    前言 如果你以前没有接触过面向对象的编程语言,那你可能需要先了解一些面向对象语言的一些基本特征,在头脑里头形成一个基本的面向对象的概念,这样有助于你更容易的学习Python的面向对象编程. 接下来我们就来了解关于Python面向对象编程的知识点吧. 类与实例 类是对象的定义,而实例是"真正的实物",它存放了类中所定义的对象的具体信息. 类.属性和方法命名规范 类名通常由大写字母打头.这是标准惯例,可以帮助你识别类,特别是在实例化过程中(有时看起来像函数调用).还有,数据属性(变量或常量

  • 详解Python:面向对象编程

    面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行.为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度 python和java都是面向对象的语言.面向对象编程的特点数据封装.继承和多态 1.类和实例 面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的"对象",每个对象都拥有相同的方法,但各自的数据可能不同. 在pyth

  • Python面向对象编程repr方法示例详解

    目录 为什么要讲 __repr__ 重写 __repr__ 方法 str() 和 repr() 的区别 为什么要讲 __repr__ 在 Python 中,直接 print 一个实例对象,默认是输出这个对象由哪个类创建的对象,以及在内存中的地址(十六进制表示) 假设在开发调试过程中,希望使用 print 实例对象时,输出自定义内容,就可以用 __repr__ 方法了 或者通过 repr() 调用对象也会返回 __repr__ 方法返回的值 是不是似曾相识....没错..和 __str__ 一样的

  • Python 面向对象编程的三大特性之继承

    目录 Python  面向对象编程的三大特性之继承 一.继承 1.继承的实际栗子 2.继承的好处 3.继承的使用场景 4.继承有几种? 5.Python 中继承的简单语法 二.不使用继承.使用继承的区别 1.需求背景 2.不使用继承 2.使用继承 三.继承的传递性 1.什么是传递性 四.继承和抽象 1.继承的重点 Python  面向对象编程的三大特性之继承 一.继承 继承也是面向对象编程三大特性之一 继承是类与类的一种关系 定义一个新的 class 时,可以从某个现有的 class 继承 新的

随机推荐