python 面向对象
导入
——Python面向对象基础
Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的。本章节我们将详细介绍Python的面向对象编程。
面向对象介绍
面向过程:根据业务逻辑从上到下写代码
函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可
面向对象编程:将数据与函数绑定到一起,进行封装,这样能够更快速的开发程序,减少了重复代码的重写过程
面向过程编程与函数式编程对比
面向过程的关注点是: 怎么做
面向对象的关注点是: 谁来做
面向对象:按人们认识客观世界的系统思维方式,采用基于对象(实体) 的概念建立模型,模拟客观世界分析、设 计、实现软件的办法。
面向对象编程**(Object Oriented Programming-OOP)**是一种解决软件复用的设计和编程方法。这种方法把软件系统中相近相似的操作逻辑和操作 应用数据、状态,以类的形式描述出来,以对象实例的形式在软件系统中复用,以达到提高软件开发效率的作用。
类和对象的概念
类和对象是面向对象编程中重要的概念
类就是一个模板,模板里可以包含多个函数,函数里实现一些功能
对象则是根据模板创建的实例,通过实例对象可以执行类中的函数
类的组成部分
类(Class)由3个部分构成
类的名称: 类名
类的属性: 一组数据
类的方法: 允许对进行操作的方法 (行为)
例如:创建一个人类
事物名称(类名):人(Person)
属性:身高(height)、年龄(age)
方法:吃(eat),跑(run)…
定义类和对象
创建类
class Person(object): name='小明' age=18 def eat(self): print('吃饭')
创建对象
对象名=类名()
例子
class Person(object): name='小明' age=18 def eat(self): print('吃饭') def run(self): print('跑步') xm =Person() # 创建对象 xm.eat() # 调用方法 print('{}的年龄是:{}'.format(xm.name,xm.age)) # 访问类属性
---------------------------------输出结果-------------------------------
吃饭
小明的年龄是:18
实例方法
在类的内部,使用 def 关键字可以定义一个实例方法,与一般函数定义不同,类方法必须包含参数 self,且为第一个参数
实例方法与属性
类里面定义的变量。定义在类里面,方法外面的属性称之为类属性,定义在方法里面使用self引用的属性称之为实例属性
class Animal(object): colour='白色' # 类属性 def __int__(self): self.name='旺财' #实例属性 ''' 实例方法,使用def关键字定义,第一个形参默认传实例对象本身 一般使用self作为第一个参数 ''' def test(self): print('我是实例方法') def show(self): print('Animal.show')
__init__方法
创建一个Animal类,并实例化一个dog对象和cat对象。
init(self) 方法,初始化方法,实例化对象的时候自动调用,完成一些初始化设置。
如果init方法里面的属性固定了,每个类创建出来的对象属性都一样,这个时候我们是不是考虑将属性当参数在实例化对象的时候传进去,让类更通用
class Animal(object): def eat(self): print('喜欢吃肉') dog=Animal() #创建一个对象 dog.colour='red' #添加属性 dog.name='旺财' #添加属性 dog.age='2岁' dog.eat() print(dog.name,dog.colour,dog.age) cat=Animal() #创建一个对象 cat.colour='black' #添加属性 cat.name='妞妞' #添加属性 print(cat.name,cat.colour) print('----------------改进-------------------') class Animal(object): def __init__(self): self.name='旺财' self.colour='red' self.age='2岁' def eat(self): print('喜欢吃肉') dog=Animal() #在创建新对象的时候是自动执行的 print(dog.name) dog.name='发财' #添加属性 dog.age='2岁' dog.eat() print(dog.name,dog.colour,dog.age) print('----------------改进2-------------------') class Animal(object): def __init__(self,name,colour,age): self.name=name self.colour=colour self.age=age def eat(self,food): print(self.name+'喜欢吃:'+food) dog=Animal('旺财','black','2岁') print(dog.name,dog.colour) dog.eat('骨头') cat=Animal('小花','red','3岁') print(cat.name,cat.colour,cat.age) cat.eat('鱼')
---------------------输出结果-------------------------- 吃饭 小明的年龄是:18 喜欢吃肉 旺财 red 2岁 妞妞 black ----------------改进------------------- 旺财 喜欢吃肉 发财 red 2岁 ----------------改进2------------------- 旺财 black 旺财喜欢吃:骨头 小花 red 3岁 小花喜欢吃:鱼
理解self
self和对象指向同一个内存地址,可以认为self就是对象的引用。
class Person: ''' 定义类 ''' def eat(self): ''' 实例方法 :return: ''' print('self={}'.format(id(self))) pass pass xw=Person() print('self=%s'%id(xw)) xw.eat()
-----------------运行结果--------------------- self=1809163727296 self=1809163727296
self传参问题
所谓的self,可以理解为对象自己,某个对象调用其方法时,python解释器会把这个对象作为第一个参数传递给self,所以开发者只需要传递后面的参数即可。
print('------------------添加参数--------------------') class Person: ''' 定义类 ''' def eat(self,name,food): ''' 实例方法 :return: ''' print('%s 喜欢吃 %s'%(name,food)) pass pass xw=Person() print('self=%s'%id(xw)) xw.eat('小王','榴莲')
-----------------输出结果-------------------- self=2269762334784 小王 喜欢吃 榴莲
魔术方法
在python中,有一些内置好的特定的方法,方法名是“xxx”,在进行特定的操作时会自动被调用,这些方法称之为魔法方法。
下面介绍几种常见的魔法方法。
__init__方法:初始化一个类,在创建实例对象为其赋值时使用。
__str__方法:在将对象转换成字符串 str(对象) 测试的时候,打印对象的信息。
__new__方法:创建并返回一个实例对象,调用了一次,就会得到一个对象。
__class__方法:获得已知对象的类 ( 对象.class)。
__del__方法:对象在程序运行结束后进行对象销毁的时候调用这个方法,来释放资源。
class Person: ''' 定义类 ''' def __init__(self,name,food): ''' 实例方法 :return: ''' self.name=name self.food=food def __str__(self): return '%s 喜欢吃 %s'%(self.name,self.food) ''' 定义了__str__方法,在打印对象的时候,会执行__str__方法。__str__方法只能return一个字符串。 ''' pass xw=Person('小王','榴莲') print(xw)
-----------------输出结果-------------------------
小王 喜欢吃 榴莲
类和对象的概念
类就是一个模板,模板里可以包含多个函数,函数里实现一些功能;
对象则是根据模板创建的实例,通过实例对象可以执行类中的函数。
定义类和对象
使用 class 语句来创建一个新类,class 之后为类的名称并以冒号结尾;
实例化类其他编程语言中一般用关键字 new,但是在 Python 中并没有这个关键字,类的实例化类似函数调用方式。
实例方法与属性
在类的内部,使用 def 关键字可以定义一个实例方法;
定义在类里面,方法外面的属性称之为类属性,定义在方法里面使用self引用的属性称之为实例属性。
__init__方法
构造初始化函数,在创建实例对象为其赋值时使用。
理解self
self和对象指向同一个内存地址,self就是对象的引用。
魔法方法
在python中,有一些内置好的特定的方法;
方法名是“xxx”;
在进行特定的操作时会自动被调用。