您好,欢迎访问一九零五行业门户网

Python面向对象编程-初级篇

前言面向对象 : 采用基于对象(实体) 的概念建立模型,模拟客观世界分析、设计、实现软件的办法。面向对象编程(object-oriented programming,简称 oop)是一种解决软件复用的设计和编程方法,把软件系统中相近相似的操作逻辑和操作应用数据、状态,以类的形式描述出来,以对象实例的形式在软件系统中复用,提高软件开发效率。
面向对象编程是python中一个极为重要的概念。
一、面向对象和面向过程1.两类软件开发设计方法面向过程编程:根据业务逻辑从上往下,将需要用到的功能代码封装到函数中,着重关注开发的步骤和过程,典型代码为c语言(关注过程)面向对象编程:将函数或所需要的功能进行分类和封装,着重关注具体哪个类和函数来实现功能,典型代码为java、c++等语言(关注结果)2.面向对象相关术语类(class):用来描述具有相同属性和方法的对象的集合,它定义了该集合中每个对象所共有的属性和方法,对象是类的实例。实例:也称对象。通过类定义的初始化方法,赋予具体的值,成为一个”有血有肉的实体”。类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。数据成员:类变量或者实例变量, 用于处理类及其实例对象的相关的数据。方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。局部变量:定义在方法中的变量,只作用于当前实例的类。实例变量:在类的声明中,属性是用变量来表示的。这种变量就称为实例变量,是在类声明的内部但是在类的其他成员方法之外声明的。方法:类中定义的函数。方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重 写。静态方法:不需要实例化就可以由类执行的方法。类方法:类方法是将类本身作为对象进行操作的方法。面向对象三大特性:
封装:将内部实现包裹起来,对外透明,提供api接口进行调用的机制。继承:即一个派生类(derived class)继承父类(base class)的变量和方法。多态:根据对象类型的不同以不同的方式进行处理。二、类和对象1.对象对象是面向对象编程的核心,在使用对象过程中,为了将具有共同特征和行为的一组对象抽象定义,形成类
2.类1)概念类是一类事物,对象即是这一类事物的具体实现,类具有相同的属性和行为
2)类(class)的组成类名:类的名称属性:事物的特征方法:具体做什么3)抽象拥有相同或类似属性和行为的对象都可以抽象成一个类
4)类的分类创建类使用class关键字,带上类名,再带上括号,括号内为object,这样的类称为:新式类;也可以不带括号和括号内的object,这样的类称为:经典类。
# 新式类 class meeting2(object): pass # 经典类 class meeting2: pass
5)创建对象a = meeting1() b
6)self类方法的第一个参数必须是self(按惯例是self,也可以是其他名称),调用时不必传入。self代表类的实例
三、获取或添加对象属性如下有个名为meeting的类,类中初始化了name、age、sex、address、attack等属性,定义了introduction和attacked两个方法:
class meeting(object): meeting类的类描述 def __init__(self, name, age, sex, address, attack): 构造函数 self.name = name self.age = int(age) self.sex = sex self.address = address self.attack = int(attack) def introduction(self): print(姓名:{}.format(self.name)) print(年龄:{}.format(self.age)) print(性别:{}.format(self.sex)) print(地址:{}.format(self.address)) def attacked(self): print(f{self.name}正在向您发起攻击,攻击力为{self.attack}!) def foreign_fun(): print(我是外部函数)
1.hasattr-检查对象是否包含指定属性或方法用法:
hasattr(object,name)
作用:检查对象中是否包含指定属性或方法
返回值:存在返回true、不存在返回false
# 实例化meeting类 meeting = meeting(张三, 20, 男, 南京, 108) # 获取meeting对象中是否存在name属性 print(hasattr(meeting, name))# true # 获取meeting对象中是否存在mobile属性 print(hasattr(meeting, mobile))# false # 获取meeting对象中是否存在attacked方法 print(hasattr(meeting, attacked))# true
2.getattr-获取对象中指定属性的属性值用法:
getattr(object,name[,default])
作用:获取对象中指定属性的属性值
返回值:若存在,则返回该属性的属性值;若不存在,则返回指定内容
# 实例化meeting类 meeting = meeting(张三, 20, 男, 南京, 108) # 获取meeting对象中name属性的属性值 print(getattr(meeting, name))# 张三 # 获取meeting对象中kills属性或方法的值,若不存在则返回指定内容 print(getattr(meeting, kills, 未找到kills方法或属性))# 未找到kills方法或属性 # 获取meeting对象中attacked方法,返回值为函数地址 print(getattr(meeting, attacked)) # 使用getattr方法可以直接调用meeting对象中的方法 f = getattr(meeting, attacked) f()
打印结果如下:
3.setattr-为object对象的name属性设置指定value用法:
setattr(object,name,value)
作用:为object对象的指定属性设置指定value
返回值:
# 实例化meeting类 meeting = meeting(张三, 20, 男, 南京, 108) # 将对象中name属性的值改为“刘德华” setattr(meeting, name, 刘德华) # 获取对象中name的属性值 print(getattr(meeting, name))# 刘德华 # 将对象外部的名为foreign_fun的方法引入对象内部,并重新命名为“new_foreign_fun” setattr(meeting, new_foreign_fun, foreign_fun) # 获取对象中是否存在foreign_fun的属性或方法,返回值为true或false print(hasattr(meeting, foreign_fun))# false # 获取对象中是否存在new_foreign_fun的属性或方法,返回值为true或false print(hasattr(meeting, new_foreign_fun))# true
打印结果如下:
四、魔法方法1.__init__() 构造函数__init__()方法是python中一种特殊的方法,被称为构造函数或初始化方法,当创建这个类的实例时就会调用该方法。
class meeting(object): meeting类的类描述 def __init__(self, name, age, sex, address, attack): 构造函数 self.name = name self.age = int(age) self.sex = sex self.address = address self.attack = int(attack) c = meeting(张三, 20, 男, 南京, 108) print(c.name)# 张三 print(c.address)# 南京
2.__del__() 析构函数当删除对象时,python解释器会默认调用一个方法__del__(),相当于unittest框架中的teardown()函数
def __del__(self): 析构函数 print(%s攻击结束 % (self.name))
每调用一次对象,都会执行一次__del__()方法
3.引用计数d = meeting(张三, 20, 男, 南京, 108) # 计算当前实例引用计数,d引用一次,sys.getrefcount(d)引用一次 print(sys.getrefcount(d))# 2
d对象的引用计数为2次,一次是d引用,一次是sys.getrefcount所引用的
4.__str()__字符串函数__str__方法需要返回一个字符串,当做这个对象的描述信息,当使用print输出对象的时候,只要定义了__str__(self)方法,那么就会打印这个方法返回的数据
def __str__(self): 字符串函数 return 我是meeting类的字符串描述 # __str__():字符串函数,定义__str__()方法时,打印对象,打印的是__str__()方法的返回值,否则打印类的内存地址 print(d)# 我是meeting类的字符串描述
未定义__str__()方法时,打印对象,打印的是meeting类的内存地址:定义了__str__()方法后,打印对象,打印的是__str__()方法的返回值:我是meeting类的字符串描述五、python的内置属性1.__dict__:获取类的属性获取类的属性,包含一个字典,由类的数据属性组成
# __dict__:获取类的属性,返回值为字典类型 print(d.__dict__) # {'name': '张三', 'age': 20, 'sex': '男', 'address': '南京', 'attack': 108}
2.__doc__:获取类的文档字符串class meeting(object): meeting1类的类描述 # __doc__:获取类的文档字符串 print(d.__doc__) # meeting1类的类描述
3.__name__:获取类名# __name__:获取类名 print(meeting.__name__) # meeting
4.__module__:类定义所在的模块类的全名是'__main__.clssname',如果类位于一个导入模块mymod中,那么classname.__module__等于mymod
from common.http_requests import httprequests # __module__:类定义所在的模块 print(meeting.__module__)# __main__ print(httprequests.__module__)# common.http_requests
meeting类的路径为__main__,而从common文件的http_requests文件中导入了httprequests类,打印其路径,则为common.http_requests
5.__bases__:获取类的所有父类构成元素获取类的所有父类构成元素(包含了一个由所有父类元素组成的元组)。例如下面有一个song类,其继承了父类music,则获取到的song类的所有父类构成元素为:(,)
class music(object): pass class song(music): pass print(song.__bases__)# (,)
小结本篇文章我们介绍了面向对象的相关概念,下面来简单总结一下:
面向对象相关概念:
类和对象:类是一类事物,对象即是这一类事物的具体实现,类具有相同的属性和行为;类的组成:类名、属性、方法带object的为新式类,不带object的为经典类获取或添加对象属性:
hasattr:检查对象是否包含指定属性或方法getattr:获取对象中指定属性的属性值setattr:为object对象的name属性设置指定value魔法方法:
__init__() 构造函数:又叫初始化方法,用来初始化一些成员变量__del__() 析构函数:每调用一次对象,都会执行一次__del__()方法,相当于unittest框架中的teardown__str()__字符串函数:返回一个字符串,当做这个对象的描述信息python内置属性:
__dict__:获取类的属性,返回值为字典类型__doc__:获取类的文档字符串__name__:获取类名__module__:类定义所在的模块__bases__:获取类的所有父类构成元素,返回类型为元组以上就是python面向对象编程-初级篇的详细内容。
其它类似信息

推荐信息