面向对象程序设计

一、面向过程与面向对象             

面向过程:

    优点:降低程序复杂度

    缺点:牵一发而动全身,不易扩展

    应用场景:很少改变的场景,比如linux kernel,git

面向对象:

    优点:易扩展

    缺点:可控性差

    应用场景:互联网,游戏,企业内部软件

二、类和对象                    

描述:对象是特征(变量)与技能(函数)的结合,类是一系列对象共有的特征与技能

类的作用:

          1.属性引用(类名.属性  可以增加或者删除属性)

          2.实例化对象

类的定义

class Chinese:
    country = 'China'
    def __init__(self,name,age):
        self.name=name #p1.name='egon'
        self.age=age #p1.age=18

    def talk(self):
        print('say chinese',self)
View Code

实例化对象

p1=Chinese('egon',18) #__init__(p1,'egon',18)

属性引用(增删改查)
print(Chinese.country) #类的数据属性
print(Chinese.__init__) #类的函数属性

查看类的属性字典,或者说名称空间

print(Chinese.__dict__) 

对象

p1=Chinese('egon',18) #__init__(p1,'egon',18)
对象的属性

点(.)的作用:从点左边的名称空间中找点右边的名字--有新名称空间产生

print(p1.name)
print(p1.age)
print(p1.__dict__)
print(p1.__dict__['name'])


类型与类是统一的
print(type(p1))

p1=Chinese('egon',18) #__init__(p1,'egon',18)
p2=Chinese('alex',1000) #__init__(p1,'egon',18)
print(id(p1.country))
print(id(p2.country))
print(id(Chinese.country))

绑定方法:绑定到谁身上,就是给谁用的,谁来调用就会自动把自己当做第一个参数传入

总结

定义在类内部的变量,是所有对象共有的,id全一样
定义在类内部的函数,是绑定到所有对象的,是给对象来用,obj.func() 会把obj本身当做第一个参数出入

对象:方法   -- 自动传值

类:函数

名字查找顺序

print(p1.x) #先从p1.__dict__,找不到再找Chinese.__dict__,找不到就会报错

类和对象的交互

class Garen:
    camp='Demacia'
    def __init__(self,nickname,life_value=200,aggressivity=100):
        self.nickname=nickname
        self.life_value=life_value
        self.aggressivity=aggressivity

    def attack(self,enemy):
        enemy.life_value-=self.aggressivity


class Riven:
    camp = 'Noxus'

    def __init__(self, nickname, life_value=100, aggressivity=200):
        self.nickname = nickname
        self.life_value = life_value
        self.aggressivity = aggressivity

    def attack(self, enemy):
        enemy.life_value -= self.aggressivity



g=Garen('欧德博爱')
r=Riven('矮里渴死')
print(r.life_value)

g.attack(r) #发送了一条消息,称为向g发送了attack指令
print(r.life_value)
View Code

类的继承

类的组合

类的多态

类的封装

接口

反射

原文地址:https://www.cnblogs.com/geek-ace/p/6994617.html