当前位置:
首页 > temp > python入门教程 >
-
Python面向对象编程代码详解(依赖关系,关联关系,组合关系)
Python面向对象编程代码详解(依赖关系,关联关系,组合关系)
面向对象编程
面向对象编程
Oop变编程是利用类和对象来创建各种模型来实现对真实世界的描述,使用面向对象编程的原因一方面是因为他可以使程序的维护和扩展变得更简单.
Class 类
一个类就是对一类相同属性的对象、蓝图、原型.简单来说就是模板
Object 对象
对象就是实体 人狗大战中的人和狗就是对象
通过赋值调用模板生成的实体,就是实例化
Inheritance继承
一个类可以派生出子类,在这个父类里定义的属性、方法自动被子类继承
Encapsulation 封装
在类中对数据的而赋值、内部调用对外部用户是透明的,这使类变成了一个胶囊或容器,里面包含着类的数据和方法.
面向过程编程
就是程序从上倒下一步步 执行,一步步从上到下,从头到尾的解决问题
面向过程的例子:有个需求是对网站的日志进行分析,生成邮件报告,分为以下步骤:
到各台服务器上收集日志,因为有许多台网站服务器,同时对外提供服务
对日志进行各种维度的分析,比如:pv,uv,来源地,访问的设备等
生成报告,发送邮件
面向对象vs面向过程总结
面向过程的优点:极大的降低了写程序的复杂度,只要顺着执行的步骤,堆叠德玛即可
缺点是:一套流水线或者流程就是用来解决一个问题,代码前一发动全身
面向对象的优点:解决了程序的扩展性,对某一个对象单独修改,会立刻反映到整个体系中,如对游戏中的一个任务参数的特征和技能修改都很容易
缺点:可控性差,无法向面向过程的程序设计流水线式的可以很精准的也测问题的处理流程与结果
类的基本语法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Dog:
dog_type = "jingba" #属性,类属性,类变量 ,公共属性,所有狗都相同的属性
hp = "100"
def __init__(self,name,age): # 初始化方法,构造方法 ,构造函数 实例化时会自自动执行,进行初始化工作
print('haha',name,age)
#要想把name,age两个值,真正的存到实例里.就需要把两个值跟实例绑定
self.name = name
self.age = age
def sayhi(self): #方法,第一个参数必须是self , self代表实例本身
print("hello ,i am a dog ,my type is %s"%self.dog_type,self.name,self.age)
d1 = Dog("xdd",2) # 生成了一个实例
d2 = Dog('jack',3)
d1.sayhi()
d2.sayhi()
print(d1.dog_type)
Self 代表实例本身
属性引用 类属性属于共有属性 ,实例属性属于私有属性
类的公共属性引用 ==> 类名.属性
实例属性的引用 ==> d.name
类之间的依赖关系
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# -*- coding:utf-8 -*-
class Dog:
def __init__(self,name,age,breed,master):
self.name = name
self.age = age
self.breed = breed
self.master = master
def depends(self):
print("hi ,i am %s, i am %s years old,my breed is %s my master is %s"%(self.name,self.age,self.breed,self.master))
class People:
def __init__(self,name,age):
self.name = name
self.age = age
def lugou(self,dog):
print("i want liugou %s"%dog.name)
p = People("jack",20)
d = Dog("xdd",2,"jingba",p.name)
d.depends()
对象之间的关联关系
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# -*- coding:utf-8 -*-
class Relationship: # 为了保存couple之间的情侣关系
def __init__(self):
self.couple = []
def make_couple(self, obj1, obj2):
self.couple = [obj1, obj2]
print("%s and %s is couple" % (obj1.name, obj2.name))
def get_my_parter(self, obj):
# print("find %s de couple"%obj.name)
for i in self.couple:
if i != obj:
return i
else:
print("alone dog")
def break_up(self):
print("%s and %s break up"%(self.couple[0].name,self.couple[1].name))
self.couple = [] # 分手
class Person:
def __init__(self, name, age, sex, relation):
self.name = name
self.age = age
self.sex = sex
self.relation = relation
# self.parter = None # 应该是一个对象
def do(self):
pass
make_cp = Relationship()
p1 = Person("xdd", 22, 'Man', make_cp)
p2 = Person("dogs", 23, "Woamn", make_cp)
make_cp.make_couple(p1, p2) #情感状态
# 双向关联,绑定
p1.parter = p2
p2.parter = p1
print(p1.parter.name, p2.parter.name)# 情侣名字
print(p1.relation.get_my_parter(p1).name) # p1的对象
p1.relation.break_up()# 分手
p2.relation.get_my_parter(p2)# 情感状态
对象间的组合关系
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# -*- coding:utf-8 -*-
# 组合关系由一堆组件构成一个完整的实体,组件本身独立,但又不能自己运行,必须跟宿主组合在一起运行
class Dog:
hp = 100
def __init__(self,name,breed,attack_val):
self.name = name
self.breed = breed
self.attack_val = attack_val
def dog_bite(self,person):
person.hp -= self.attack_val
print("Dog [%s] bite person [%s] ,person hp - [%s],hp is [%s]"%(self.name,person.name,self.attack_val,person.hp))
class Weapon: #武器
def dog_stick(self,obj):
self.name = "打狗棒"
self.attackval = 30
obj.hp -= self.attackval
self.print_log(obj)
def print_log(self,obj):
print("[%s] bei [%s] attack ,- hp [%s],hp is [%s]"%(obj.name,self.name,self.attackval,obj.hp))
class Person:
hp = 100
def __init__(self,name,age):
self.name = name
self.age = age
self.weapon = Weapon()
#self.attack_val = attack_val
# def person_beat(self,dog):
# dog.hp -= self.attack_val
# print("People [%s] beat Dog [%s], Dog - hp [%s],Dog hp is [%s]"%(self.name,dog.name,self.attack_val,dog.hp))
d = Dog("dogs","erha",30)
p = Person("xdd",12)
d.dog_bite(p)
p.weapon.dog_stick(d)
出处:https://www.cnblogs.com/zjaiccn/p/13220174.html
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
关于JS定时器的整理
JS中使用Promise.all控制所有的异步请求都完
js中字符串的方法
import-local执行流程与node模块路径解析流程
检测数据类型的四种方法
js中数组的方法,32种方法
前端操作方法
数据类型
window.localStorage.setItem 和 localStorage.setIte
如何完美解决前端数字计算精度丢失与数