1.面向对象介绍
- 面向对象编程和面向过程编程的区别:
面向过程编程:
根据需求从上到下编写代码
函数式:将某功能代码封装导函数中,日后再需使用调用即可
面向对象编程:将数据与函数绑定到一起,进行封装,这样能够更快速的开发程序,减少了重复代码的重写过程
面向对象:按人们认识客观世界的系统思维方式,采用基于对象(实体) 的概念建立模型,模拟客观世界分析,设 计,实现软件的办法.
面向对象编程(Object Oriented Programming-OOP)是一种解决软件复用的设计和编程方法.这种方法把软件系统中相近相似的操作逻辑和操作 应用数据,状态,以类的形式描述出来,以对象实例的形式在软件系统中复用,以达到提高软件开发效率的作用.
类和对象:
类和对象是面向对象编程中重要的概念
类就是一个模板,模板里可以包含多个函数,函数里实现一些功能
对象则是根据模板创建的实例,通过实例对象可以执行类中的函数
类的组成
-
类(Class)由3个部分构成
- 类的名称: 类名
- 类的属性: 一组数据
- 类的方法: 允许对进行操作的方法 (行为)
-
例如:创建一个人类
- 事物名称(类名):人(Person)
- 属性:身高(height)、年龄(age)
- 方法:吃(eat),跑(run)…
类的抽象
具有相同(或者类似)属性和行为的一系列对象的集合都可以抽像出一个类
例:
小明开着他家的宝马去逛街
小明 ->可以抽象出人类
宝马 ->可以抽象出车类
定义类和对象
定义类:
格式
class 类名():
#可不带括号
例
class Person(object):
Name = "xiaoli"
Age = 15
# 属性
def Drink(self):
print("喝水")
#方法
创建对象:
格式
对象名 = 类名()
例
#创建一个Car对象,bmw就是Car的对象,对象可以访问属性,调用方法.
a = Person # 创建对象
Person.Drink # 调用Drink方法
print(Person.Name) # 访问类属性
2.实例方法与属性
实例方法
在类的内部,使用 def 关键字可以定义一个实例方法,与一般函数定义不同,类方法必须包含参数 self,且为第一个参数
例
class Animal(object):
def test(self):
print("我是实例方法")
# 实例方法,使用def关键字定义,第一个形参默认传实例对象本身,一般使用self作为第一个参数
def show(self):
print("Animal.show")
# 一个类里面可以有多个实例方法
属性
类里面定义的变量.定义在类里面,方法外面的属性称之为类属性,定义在方法里面使用self引用的属性称之为实例属性
例
class Animal(object):
Colour = "white" # 类属性
def __init__(self):
self.name = "旺财" # 实例属性
_init_(self)方法
_init_(self) 方法,初始化方法,实例化对象的时候自动调用,完成一些初始化设置。
例
class Animal(object):
def __init__(self):
self.Name = "旺财"
self.Colour = "白色"
pass
pass
Dog = Animal()
print(Dog.Name)
# 结果为打印旺财
__init__传参
如果init方法里面的属性固定了,每个类创建出来的对象属性都一样,这个时候我们是不是考虑将属性当参数在实例化对象的时候传进去,让类更通用?
例
class Animal(object):
def __init__(self, Name, Colour):
self.Name = Name
self.Colour = Colour
pass
pass
Dog = Animal("小黑", "黑色")
print(Dog.Name)
# 结果为打印小黑
理解self
self和对象指向同一个内存地址,可以认为self就是对象的引用.
class Test(object):
def GetSelf(self):
print("self的内存地址为{}".format(id(self)))
pass
pass
t = Test()
print(id(t))
t.GetSelf()
# 两者内存地址一致
self传参
所谓的self,可以理解为对象自己,某个对象调用其方法时,python解释器会把这个对象作为第一个参数传递给self,所以开发者只需要传递后面的参数即可.
例
class Car(object):
def __init__(self,name,colour):
self.name = name
self.colour = colour
# 创建一个方法打印 self 的id
def getself(self):
print('self=%s'%(id(self)))
bmw = Car('宝马','黑色')
# 实例化对象时,self不需要开发者传参,python自动将对象传递给self
print(id(bmw))
bmw.getself()
3.魔法方法
概述(摘抄):
在python中,有一些内置好的特定的方法,方法名是“__xxx__”,在进行特定的操作时会自动被调用,这些方法称之为魔法方法。
下面介绍几种常见的魔法方法。
__init__方法:初始化一个类,在创建实例对象为其赋值时使用。
__str__方法:在将对象转换成字符串 str(对象) 测试的时候,打印对象的信息。
__new__方法:创建并返回一个实例对象,调用了一次,就会得到一个对象。
__class__方法:获得已知对象的类 ( 对象.__class__)。
__del__方法:对象在程序运行结束后进行对象销毁的时候调用这个方法,来释放资源。
……
__str__方法
直接打印对象,输出结果只一串类似id地址的信息.
例:
class Animal(object):
def __init__(self, Name, Colour):
self.Name = Name
self.Colour = Colour
pass
pass
Dog = Animal("小黑", "黑色")
print(Dog)
# 结果为打印内存地址<__main__.Animal object at 0x000001600CC5A970>
加上__str__方法
例:
class Animal(object):
def __init__(self, Name, Colour):
self.Name = Name
self.Colour = Colour
pass
def __str__(self):
return '取名{}颜色{}'.format(self.Name,self.Colour)
pass
Dog = Animal("小黑", "黑色")
print(Dog)
# 结果为打印取名小黑颜色黑色
注:定义了__str__方法,在打印对象的时候,会执行__str__方法.__str__方法只能return一个字符串.