面向对象编程

面向对象编程

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

Oop变编程是利用类和对象来创建各种模型来实现对真实世界的描述,使用面向对象编程的原因一方面是因为他可以使程序的维护和扩展变得更简单.

Class 类

一个类就是对一类相同属性的对象、蓝图、原型.简单来说就是模板

Object 对象

对象就是实体 人狗大战中的人和狗就是对象    

通过赋值调用模板生成的实体,就是实例化

Inheritance继承 

一个类可以派生出子类,在这个父类里定义的属性、方法自动被子类继承

Encapsulation 封装

在类中对数据的而赋值、内部调用对外部用户是透明的,这使类变成了一个胶囊或容器,里面包含着类的数据和方法.

面向过程编程

就是程序从上倒下一步步 执行,一步步从上到下,从头到尾的解决问题

面向过程的例子:有个需求是对网站的日志进行分析,生成邮件报告,分为以下步骤:

  1. 到各台服务器上收集日志,因为有许多台网站服务器,同时对外提供服务
  2. 对日志进行各种维度的分析,比如:pv,uv,来源地,访问的设备等
  3. 生成报告,发送邮件 

面向对象vs面向过程总结 

面向过程的优点:极大的降低了写程序的复杂度,只要顺着执行的步骤,堆叠德玛即可

缺点是:一套流水线或者流程就是用来解决一个问题,代码前一发动全身

面向对象的优点:解决了程序的扩展性,对某一个对象单独修改,会立刻反映到整个体系中,如对游戏中的一个任务参数的特征和技能修改都很容易

缺点:可控性差,无法向面向过程的程序设计流水线式的可以很精准的也测问题的处理流程与结果

 

类的基本语法

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

 

类之间的依赖关系

# -*- 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()

对象之间的关联关系 

# -*- 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)# 情感状态

对象间的组合关系

# -*- 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)

  

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄