1.什么是面向对象
。Python是一门面向对象的编程语言
。所谓面向对象的语言,简单理解就是语言中所有操作都是通过对象来完成的
。什么是面向过程
1.面向过程指将我们的程序分解为一个一个步骤,通过对每个步骤的抽象来完成程序
2.。这种编写方式往往只适用于一个功能,如果要试下别的功能往往复用性比较低
3.这种编程方式符合人类的思维,编写起来比较容易
a.妈妈穿衣服穿鞋出门
b.妈妈骑车
c.妈妈到超市
d.妈妈买西瓜
e.妈妈结账
f.妈妈骑车回家
g.到家切西瓜给孩子吃
结果是孩子吃西瓜
。面向对象的编程语言,关注的是对象,二不注重过程,对于面向对象一切皆对象
。以上例子可以用孩子妈妈给孩子买西瓜姐姐
。面向对象的编程思想,将所有的功能统一保存对应的对象中,要使用某个功能,直接找到对应的对象即可。
。这种编码方式,比较容易阅读,并且易于维护,容易复用,但是编写的过程中不太符合常规思维,编写相对麻烦。
2.类的简介(class)
。类(class):简单理解就是一张图纸,在程序中我们需要根据类来创建对象
。我们也称对象是类的实例(instance)
。如果多个对象是通过一个类创建的,我们称这些对象是一类对象
a = int(1) #创建一个int类的实例
print(a,type(a)) #1 <class 'int'>
b = str('pyhone')
print(b,type(b)) #python <class 'str'>
。自定义的类,类名要使用大写字母开头,使用大驼峰命名法
。类的语法 class 类名([父类]):
pass
class MyClass():
pass
print(MyClass) #<class '__main__.MyClass'>
mc = MyClass() #mc就是通过MyClass创建的对象,mc是MyClass的实例
print(mc,type(mc)) #<__main__.MyClass object at 0x0000000002889D48> <class '__main__.MyClass'>
r = isinstance(mc,MyClass) #判断mc是不是有个类
print(r) #True
类也是一个对象,用了创建对象的对象
类是type类型的对象,定义类实际上就是定义一个type类型的对象
我们可以向对象中添加变量,对象中添加变量我们称之为属性
语法:对象.属性名 = 属性值
mc.name = '钢铁侠'
print(mc.name) #钢铁侠
3. 类的定义
类和对象都是现实生活中事物的抽象
实际上所有的实物都有两部分沟通成
1.数据(属性)
2.行为(方法)
尝试过定义一个人类
class Presson():
#在类的代码块中,我们可以定义变量和函数
#在类中我们定义的变量,将会成为所有实例的公共属性
#所有实例都可以访问这些变量
a = 10
b = 20
name = '钢铁侠'
#在类中也可以定义函数,类中定义的函数我们称之为方法
#这些方法可以通过该类的实例来访问
def speck(a):
print('hello!')
p1 = Presson()
p2 = Presson()
print(p1.a,p2.b) #10 20
#调用的方法,对象.方法名
#方法调用和函数调用的区别
#如果函数调用 调用的时候有几个形参,就会传递几个实参
#但是如果是方法调用,默认传递一个参数,方法中至少定义一个形参
p1.speck() #hello
4.self的含义
为什么实例对象能够访问到类对象重点属性和方法?
类中定义的属性和方法都是公共的,任何该类的实例都可以访问
属性和方法调用的顺序
当我们调用一个对象的属性时,解析器会诊当前的对象中寻找是否含有改属性
如果有,则 直接返回当前对象中的属性值
如果没有呢,则去当前对象的类对象中区寻找,如果类对象中 有则返回类对象中的属性值,
如果类对象中没有,则报错
方法每次被调用是,解析器都会自动传递一个参数
第一个参数,就是调用方法的本身
如果是p1调用,第一个参数就是p1的对象
如果是p2调用,第一个参数就是p2的对象
一般习惯把这个参数命名为self
self
。self在定义时需要定义,但是在调用是会自动传入
。self的名字并不是规定死的,但是最好还是按照约定用self,
。self总是只调用时的类的实例