一:面向对象技术简介
- 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
- 方法:类中定义的函数。
- 类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
- 数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。
- 方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
- 实例变量:定义在方法中的变量,只作用于当前实例的类。
- 继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系。
- 实例化:创建一个类的实例,类的具体对象。
- 对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。
二:类的结构:
1 class Myclass:2 name = 'lwx' #静态属性, 静态变量, 静态字段3 4 5 def fun(self): #函数, 动态属性, 方法6 pass7 #函数封装一个功能, 而面对对象封装多个相关的功能8 #面对对象抽象, 它是一种思想, 站在上帝的角度去理解他9 #程序可扩展, 对象都是一个个独立的, 耦合性, 差异性。
三:类实例化一个例子:
1 class Person: #一个公共框架, 一个公共模型 2 animal = '神级人物' 3 walk_way = '我是天使,我会飞!' 4 language = 'ASCCI' 5 def __init__(self, name, eag): #功能:给对象封装属性 6 self.name = name 7 self.eag = eag 8 def walk(self): 9 print(4444)10 p1 = Person('lwx', 25) #创建一个类的实例,累的具体对象11 #实例化内部进行了三个阶段吧12 # 1:从内存中开辟了一个对象空间13 # 2:自动执行类中__init__方法,并且将对象空间自动传给self参数,其他参数手动传入14 # 3:执行__init__方法,并将对象空间封装相应的属性
四:查看类对象的方法
1,类
1》查看类中的所有属性及方法
1 class Person: 2 name = 'lwx' 3 eag = 25 4 def __init__(self,sex, work): 5 self.sex = sex 6 self.work = work 7 def fun(self): 8 print('我是一个方法') 9 #1:查看类中的所有属性及方法10 # print(Person.__dict__)11 '''{'__module__': '__main__', 'name': 'lwx', 'eag': 25, '__init__':, 'fun': , '__dict__': , 13 '__weakref__': , '__doc__': None}'''14 Person.__dict__['name'] = 'alex' #不能改变15 print(Person.__dict__['name']) #可以查询
注意点:工作中,学习中一般用到的___dict__查看类中的所有属性及方法,不进行其他操作
2》查看, (增删改)类中某个, 某些属性用到万能的 .
1 print(Person.name) #查询类中的变量2 Person.name = '雷文轩' #修改3 Person.animal = '高级任务' #没有的变量名字是增加,有的是改4 del Person.name #删除5 print(Person.__dict__) #name 已经移除
2:对象
1》实例化过程内部进行了3个阶段
(1):在内存中开辟了一个对象空间
(2):自动执行类中的__init__方法, 并且将对象空间自动传给self参数
(3):执行__init__ 方法, 给对象空间封装相应的属性
2》对象操作对象空间
(1)查看对象空间所有的属性__dict__
1 p1 = Person(25, 'IT') 2 print(p1.__dict__)
(2)对象操作对象的某个属性,增删改查 用万能的 点
1 #增加 2 # p1.name = 'wuyan' #对象的增加 3 print(p1.name) #此时的p1.name 是类的里面的 4 p1.name = p1.name #=号右边值添加给对象name 5 #对象操作类空间的属性只能查 6 print(p1.__dict__) 7 p1.__dic__ = {1:2} #一般不这样操作的 8 print(p1.__dic__) #此时对象只有{1:2} 9 10 #删除11 del p1.name12 #查13 print(p1.__dic__)
5:类名称空间 和公共空间
1》类是一个公用模板, 公用框架
2》对象为什么能调用类中的属性与方法而且只能调用,不能改变?
首先对象从自己的空间去找, 没有属性他会通过类对象,对象只能查看类中的属性, 不能增删改类中的属性
3》类能不能调用对象的属性? 不能
4》对象与对象之间可不可互相调用?
同一类实例化出来的对象之间是不能互相访问的
不同类势力化的对象有可能互相访问
6:给对象封装属性: __init__任意位置。
7:对象的组合
1:组合的意义:让类的对象与另一个类的对象产生关系,类与类之间产生关系
2:组合的方式;
1》:一种是在类里面封装一个方法
2》:另一种是直接给对象添加一个属性等于一个对象名,通过赋值的属性调用另一个对象,
2:不同类对象可以相互关联,这样就可以调用