12 面向对象编程

一 、面向对象与面向过程

  1.面向过程:一切以事物的流程为核心,核心是‘过程’,过程是解决问题的步骤,有先后顺序,的流水线思维。

    优点 :负责的问题流程化,编写相对简单

    缺点:可扩展性差

  2.面向对象:一切以对象为核心,比如汽车有轮子,方向盘,发动机,这些我们都可以使用程序把他们造出来。

    优点:可扩展性强

    缺点:编程复杂度高与面向过程

二、面向对象的编写

  1.类的创建

  class Computer:

    pass

         以上完成了一个电脑的类的创建(相当于有了一张空白设计图纸)。

  而 c_r = Computer()  #相当于造了一台什么都没有的空白电脑。

   通过使用 “对象.特征”可以给电脑添加各种属性 c.color = 'red'  c.price = 4444等电脑的属性。

而大多数的电脑都有颜色、cpu、价格等相同的属性,所以就可以将他们放入一个类中。

class Computer:
    def __init__(self,name):
        self.name = name
computer = Computer('lenovo')
computer.price = '1000'
computer.model = 'lenovo'
computer.size = '14.5'
print(computer.name)
print(computer.size)

computer2 = Computer('huawei')
computer2.price = '2000'
computer2.model = 'huawei'
print(computer2.price)
print(computer2.model)
类和属性的创建

  2.方法的创建

  电脑还可以玩游戏,所以可以创建一个方法

class Computer():
    def __init__(self,name,cpu,size,price):
        self.name = name
        self.cpu = cpu
        self.size = size
        self.price = price
    def play_game(self,name):#方法
        print('我的%s,不能打%s这个游戏,因为我用的cpu是%s,价格%s'%(self.name,name,self.cpu,self.price))
c = Computer('联想','i9','17','30000')
print(c.name)
print(c.price)
print(c.size)
print(c.cpu)
# print('c=',c)
c.play_game('魂斗罗')
方法的创建

 总结:    类与对象的关系:  类是对事物的总结. 抽象的概念. 类⽤来描述对象. 对象是类的实例化的结果. 对象能执⾏哪些方法. 都由类来决定. 类中定义了什么对象就拥有什么

三、面向对象的三大特征

   面向对象三大特征: 封装, 继承, 多态. 只要是⾯向对象编程语⾔. 都有这三个特征.

    1. 封装: 把很多数据封装到一个对象中. 把固定功能的代码封装到一个代码块, 函数, 对 象, 打包成模块. 这都属于封装的思想. 具体的情况具体分析. 比如. 你写了一个很⽜B 的函数. 那这个也可以被称为封装. 在面向对象思想中. 是把一些看似⽆无关紧要的内容 组合到一起统一进行存储和使用. 这就是封装.

     2. 继承: 子类可以自动拥有父类中除了私有属性外的其他所有内容. 说白了, 儿⼦可以 随便用爹的东西. 但是朋友们, 一定要认清楚⼀个事情. 必须先有爹, 后有⼉子. 顺序不 能乱, 在python中实现继承非常简单. 在声明类的时候, 在类名后面添加一个小括号, 就可以完成继承关系. 那么什么情况可以使⽤用继承呢? 单纯的从代码层面上来看. 两 个类具有相同的功能或者特征的时候. 可以采用继承的形式. 提取一个父类, 这个⽗类 中编写着两个类相同的部分. 然后两个类分别取继承这个类就可以了. 这样写的好处 是我们可以避免写很多重复的功能和代码. 如果从语义中去分析的话. 会简单很多. 如
果语境中出现了了x是⼀种y. 这时, y是一种泛化的概念. x比y更加具体. 那这时x就是y的 子类. 比如. 猫是一种动物. 猫继承动物. 动物能动. 猫也能动. 这时猫在创建的时候就 有了了动物的"动"这个属性. 再比如, 白骨精是一个妖怪. 妖怪天⽣就有一个比较不好 的功能叫"吃人",  白骨精⼀出生就知道如何"吃⼈人". 此时 白骨精继承妖精. 

class Yao:    
    def chi(self):        
        print("我是妖怪, 我天生就会吃人")
class BaiGuJing(Yao):   # 白骨精继承妖怪    
    pass
bgj = BaiGuJing() 
bgj.chi()   # 我是妖怪, 我天生就会吃⼈人  # 虽然白骨精类中没有编写chi. 但是他爹有啊. 直接拿来⽤用        
View Code

    3. 多态: 同一个对象, 多种形态. 这个在python中其实是很不容易说明白的. 因为我们⼀ 直在用. 只是没有具体的说.  比如. 我们创建一个变量a = 10 , 我们知道此时a是整数 类型. 但是我们可以通过程序让a = "alex", 这时, a又变成了字符串类型.  这是我们都 知道的. 但是, 我要告诉你的是. 这个就是多态性. 同一个变量a可以是多种形态. 可能 这样的程序和说法你还get不到具体什是多态. 接下来. 我们来看一个程序. 北京动 物园饲养员alex一天的工作. 从早上开始喂养猪, 中午喂哈士奇, 晚上还得喂阿拉斯加. 来我们用代码实现这样的代码:  

class Baigujin:
    def teng(self):
        print('白骨精痛')

class Zhizhujin:
    def teng(self):
        print('蜘蛛精痛')

class Heixiongjin:
    def teng(self):
        print('黑熊精痛')
class Swukong:
    # def dahei(self,hei):
    #     hei.teng()
    # def dabai(self,bai):
    #     bai.teng()
    # def dazhi(self, zhi1):
    #     zhi1.teng()
    def da(self, yaojin):
        yaojin.teng()
wukong = Swukong()
zhi = Zhizhujin()
wukong.da(zhi)

wukong = Swukong()
hei = Heixiongjin()
wukong.da(hei)

wukong = Swukong()
bai = Baigujin()
wukong.da(bai)
View Code

   

猜你喜欢

转载自www.cnblogs.com/-0121/p/9925564.html
今日推荐