Python学堂011
一、面向对象
1、对象(object)
2、python就是一个面向对象得编程语言
3、数据从 硬盘->内存->CPU 运行
4、对象就是内存中专门用来存储数据得一块区域
对象的结构
ID(标识)
type(类型)
value(值)
面向过程
就是将程序的逻辑分解成一个一个的步骤;
通过对每个步骤来完成一个程序;
这种方式写代码只适用于一个功能(功能单一);
这种方式符合人类的思维逻辑,编写起来比较简单;
面向对象的编程语言,关注的是对象,而不注重过程,对于面向对象一切皆对象;
这个编码方式比较容易阅读,并且易于维护,容易复用。
但是编写的过程中不太符合常规思维,编写相对麻烦。
这个方式可以用:孩子妈妈给孩子买瓜来解决
妈妈穿衣服穿鞋出门
妈妈骑上电动车
妈妈到超市门口放好电动车
妈妈买西瓜
妈妈结账
妈妈骑电动车回家
到家给孩子吃西瓜
1、找对象
2、搞对象
二、类的简介
名称:类 、 单词:class
开发过程中需要自己定义一些对象,那就是类;
类,简单理解就相当于一张图纸,在程序中我们需要根据类来创建对象
如果多个对象是通过一个类创建的,我们就称这些对象的一类对象
比如:int()、float()、bool()、str()......
a = int(10) 等价于 a = 10 创建了一个int类的实例
定义类要大写开头(命名类使用大驼峰命名法)
语法:
class 类名([父类])
pass
class Myclass():
pass
print(class Myclass)#<class '__main__.Myclass'> #<:class(类) main(表示主文件) Myclass(类名)>
使用MyClass来创建一个对象
mc、mc2、mc3、mc4 都是由MyClass这个类创建的对象, 它们都是一类对象
mc = Myclass() mc就是通过MyClass创建的对象 mc是MyClass的实例
mc2 = Myclass()
mc3 = Myclass()
mc4 = Myclass()
print(mc,type(mc)) # <__main__.Myclass object at 0x000002C36D745520> <class '__main__.Myclass'>
三、类的说明
类也是一个对象;
类就是用来创建对象的对象;
类是type类型的对象,定义类实际上就是定义了一个type类型的对象;
现在通过MyClass创建的对象都是一个空对象;
可以向对象中添加变量,对象中的变量称为属性;
语法 对象.属性名 = 属性值
创建一个实例:
class Myclass():
pass
mc = MyClass
mc2 = MyClass
mc.name = '葫芦娃'
mc2.name = ~~'葫芦娃救爷爷'~~
print(mc)
print(id(MyCalss),type(MyClass)) # <class 'type'>
print(mc.name)
print(mc2.name) # AttributeError: 'Myclass' object has no attribute 'name'
四、类的定义
1、 对现实生活中事物的抽象;
2、 实际上所有的事物由两部分组成;
第1部分、数据(属性)
第2部分、行为(方法)
3、类和对象和实例对象都可以保持属性和方法;
4 、如果这个属性或者方法是所有实例共享的,则应该将其保存到类对象当中;
5、 如果这个属性或者方式是某个实例独有的,则应该保存到实例对象当中;
6、 一般情况下属性都保存到实例对象中;
7、 方法一般都保存到类对象中;
8、 在类中有代码块,我们可以定义变量和函数;
9、 在类中我们定义的变量,将会成为所有实例对象的公共属性 通过对象.属性名的方式访问;
10、 所有实例都可以访问这些变量;
11、 在类中也可以定义函数,类中定义的函数,我们称之为方法;
12、 这些方法也可以通过该类的实例来访问;
13、 函数会成为该类实例的公共方法,所有该类的实例都可以通过 对象.方法名()的方式调用;
14 、方法调用和函数调用的区别;
15、 如果是函数调用,你有几个形参,我就传递几个实参;
16、 如果是方法调用,默认传递一个形参,所以在定义方法的时候至少得有一个形参;
17、 当我们调用一个对象属性时,解释器会现在当前的对象寻找是否有结果,没有于则找类对象(相似:就近原则),如果类没有就报错;
定义一个类:
创建Person的实例
class Person:
a = 1
b = 2
name1 = '葫芦娃'
name2 = '葫芦娃的爷爷'
def speak(a):
print('一个一个送')
P1 = Person
P2 = Person
print(p1.a,p2.b)
P1.speak()
18、self参数在定义方法的时候会默认传递self参数;
self指的是类的实例;
def __init__(self,page_queue,img_queue,*args,**Kwargs):
super(Procuder,self).__init__(*args,**Kwargs)
self.page_queue = page_queue
self.img_queue = ing_queue
class Person():
name = '葫芦娃'
# 方法每次被调用的时候,解释器会自动传递一个实参
# 如果是p1调用,则第一个参数(a)就是p1对象
# 如果是p2调用,则第一个参数(a)就是p2对象
# 一般我们都会命名这个参数为self
def speak(self):
print('你好!我是%s'%self.name)
p1 = Person()
p2 = Person()
p1.name = '钢铁侠'
p2.name = '绿巨人'
p1.speak()
p2.speak()
print(p1,p2)
'''
输出的结果为:
你好!我是钢铁侠
你好!我是绿巨人
'''