python-14-面向对象
一、面向过程简介
二、面向对象的两个核心概念——类和对象
类:是对一群具有相同特征或者行为的事物的一个统称,是抽象的,不能直接使用
特征被称为属性
行为被称为方法
类就相当于一个制造飞机时的图纸,是一个模板,是负责创建对象的
对象:是由类创建出来的一个具体存在,可以直接使用
由哪一个类创建出来的对象,就拥有在哪一个类中定义的:属性和方法
对象 就相当于用图纸制造的飞机
在程序开发中,应该先有类,再有对象
类和对象的关系:
类是模板,对象是根据类这个模板创建出来的,应该先有类,再有对象
类只有一个,而对象可以有很多个
不同对象之间属性可能会各不相同
类中定义了什么属性和方法,对象中就有什么属性和方法,不可能多,也不可能少
三、类的设计
通常要满足三要素:
1、类名,满足大驼峰命名法
2、属性,这类事物具有什么特征
3、方法,这类事物具有什么行为
四、面向对象语法
1、dir内置函数
对象几乎是无处不在的,变量、数据、函数等都是对象
内置方法
2、定义简单的类(只包含方法)
创建对象:对象变量 = 类名()
可以在类的外部代码中,直接通过.设置一个属性,但是不推荐使用
如果先调用方法,此时并没有设置name属性,程序就会报错。
对象包含哪些属性还是要封装到类的内部
3、方法中的self参数
哪一个对象调用了方法,self就是哪一个对象
调用方法时,不需要传递self参数
在方法内部
可以通过self. 访问对象属性
也可以通过self. 调用其他的对象方法
1 class Cat: 2 def eat(self): 3 print("%s爱吃鱼" % self.name) 4 5 def dink(self): 6 print("%s爱喝水" % self.name) 7 8 9 tom = Cat() 10 tom.name = "Tom" 11 tom.eat() 12 tom.dink() 13 14 lazy_cat = Cat() 15 lazy_cat.name = "大懒猫" 16 lazy_cat.eat() 17 lazy_cat.dink()
4、初始化方法
当时用 类名() 创建对象的时候,会自动执行以下操作:
1.为对象在内存中分配空间--创建对象
2.为这个对象的属性设置初始值--初始化方法(init)
这个初始化方法就是__init__方法,__init__是对象内置方法
__init__是专门用来定义一个类具有哪些属性的方法
1 class Cat: 2 def __init__(self): 3 print("初始化")
tom = Cat()
在初始化方法内部定义属性
1.在__init__方法内部使用 self.属性名 = 属性的初始值 就可以定义属性
2.定义属性之后,再使用 类名() 创建的对象,都会拥有该属性
1 class Cat: 2 def __init__(self): 3 print("初始化") 4 self.name = 'Tom' 5 6 def eat(self): 7 print("%s爱吃鱼" % self.name) 8 9 def dink(self): 10 print("%s爱喝水" % self.name) 11 12 13 tom = Cat() 14 #tom.name = "Tom" 15 tom.eat() 16 tom.dink()
5、内置方法和属性
1.__del__:对象被从内存中销毁前,会被自动调用
如果希望对象销毁前再做一些事情,可以考虑__del__方法
1 class Cat: 2 def __init__(self, new_name): 3 self.name = new_name 4 print("%s来了" % new_name) 5 6 def __del__(self): 7 print("%s去了" % self.name) 8 9 10 Tom = Cat('Tom') 11 print("-"*50)
1 class Cat: 2 def __init__(self, new_name): 3 self.name = new_name 4 print("%s来了" % new_name) 5 6 def __del__(self): 7 print("%s去了" % self.name) 8 9 10 Tom = Cat('Tom') 11 del Tom 12 print("-"*50)
生命周期:
一个对象从调用 类名() 创建,生命周期开始;
一个对象的 __del__ 方法一旦被调用,生命周期结束
在对象的生命周期内,可以访问对象属性,或者让对象调用方法
2.__str__:返回对象的描述信息,print函数输出使用
在python中,使用print输出对象变量,默认情况下,会输出这个变量 引用的对象 是由哪一个类创建的对象,以及在内存中的地址
如果在开发中,希望使用print输出对象变量 时,能够打印自定义的内容,就可以使用__str__这个内置方法了
__str__必须返回一个字符串:
1 class Cat: 2 def __init__(self, new_name): 3 self.name = new_name 4 print("%s来了" % new_name) 5 6 def __del__(self): 7 print("%s去了" % self.name) 8 9 def __str__(self): 10 return "我是小猫[%s]" % self.name
Tom = Cat('Tom')
print(Tom)
tom = Cat()