时间:2021-05-22
概述
很多人接触Python,都是从爬虫开始,其实很多语言都可以做爬虫,只是Python相对其他语言来说,更加简单而已。但是Python并不止于爬虫,在人工智能,科学计算等方面的应用更加广泛。古人云:万丈高楼平地起,要想有长足的发展,打好基础很重要,本文主要讲解Python的面向对象相关知识,仅供学习分享使用,如有不足之处,还请指正。
面向对象的特征
类:用来描述相同事物的特征的集合,如:Person 类,表示人,具有人的属性和特征。
对象:通过类定义的具体的实例,如:zhangsan 表示一个具体的人。
继承:是指派生类继承基类的方法和属性,并具有自己属性和特征,如:Man是Person的子类。
封装:隐藏数据和实现细节,提供对外访问方法。
多态:一个基类,可以有多个派生类,可以有不同的形态。
抽象:抛开细节,只关注本质特征的过程。
以上是面向对象的基本特征,那么Python在面向对象方面是如何做的呢?
创建类
如下所示:
创建对象
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__)类的属性与方法
如下所示:
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)
类的继承
面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制。通过继承创建的新类称为子类或派生类,被继承的类称为基类、父类或超类。
如下所示: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面向对象编程的资料请关注其它相关文章!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了Python面向对象封装操作。分享给大家供大家参考,具体如下:目标封装小明爱跑步存放家具01.封装封装是面向对象编程的一大特点面向对象编程的第一步
Python基础教程之闭包的使用方法前言:闭包(closure)是函数式编程的重要的语法结构。函数式编程是一种编程范式(而面向过程编程和面向对象编程也都是编程范
Python非常易学,强大的编程语言。Python包括高效高级的数据结构,提供简单且高效的面向对象编程。Python的学习过程少不了IDE或者代码编辑器,或者集
Python非常易学,强大的编程语言。Python包括高效的数据结构,提供简单且高效的面向对象编程。Python的学习过程少不了IDE或者代码编辑器,或者集成的
一、面向过程编程与面向对象编程的区别众所周知,C语言是一种典型的面向过程编程语言,而C++确实在它的基础上改进的一款面向对象编程语言,那么,面向过程与面向对象到