面向对象

  面先对象编程(Object Oriented Programming,OOP,面向对象程序设计),又称OOP。面向对象编程是一种编程思想,与之像对比的是面向过程编程。面向过程编程是对问题的流程化编程处理,就好比说把大象装进冰箱,第一步打开冰箱,第二部放进冰箱,第三步关上门。这是其中的过程按照流程一步步走,遇到选择就用if..else,whlie 等流程控制语句,使问题细化,一步步接近结果,直至完成。但是面向对象编程就把问题抽象化,抽象问题的属性,放在类中。就好比可乐是一个类,它就是抽象的,因为你找不到者类。可能读者会说,可口可乐不就是可乐吗?这是没毛病的。但是我要反问一句,可乐就是可口可乐吗?那百事可乐又算什么?那是因为所有品牌的可乐,所有国家的可乐都是可乐这个范畴。可乐是它们的统称,所有可乐类这个范畴下的都是可乐的一种,但是它们永远也不能替代整个可乐这大的类。这个可乐这个类的内容就是所有可乐的共同特性。这些共同特征就是抽象出来的。有了这些类,这些属性,添加到问题解决有帮助的属性。便可以随意调用这些属性来解决问题。

# 创建可乐这个类
class Kele:
    name = '可乐名'
    package = '包装'

  可乐这个类,不管什么品牌都有名字,都有包装。百事可乐和可口可乐,包装有易拉罐的,有玻璃瓶。

class Cola:
    name = '可乐名'
    package = '包装'

CocaCola = Cola()    # 类的实例化。又称对象
CocaCola.name = 'Cocacola'
CocaCola.package = '易拉罐'
print(CocaCola.name, CocaCola.package)
>>>Cocacola 易拉罐

 

  类中的__init__魔方法

class CocaCola:
      formula = ['caffeine','sugar','water','soda']
      def __init__(self):
            for element in self.formula:
                print('Coke has {}!'.format(element))
      def drink(self):
            print('Energy!')
coke = CocaCola()

     __init__()魔方法神奇之处就在于如果你在类中定义了它,在创建实例的时候它能够帮你处理很多事情。比如新增一个实例,那么它会自动帮我们执行__init__中的内容。它的使用方法和普通函数一样,但是不能有任何返回值。

  对象的绑定。在类实例化之后默认都是绑定对象。

class L:
    def __init__(self, name):
        self.name = name

    def say(self):
        print(f'I am {self.name}')
meKing = L('meKing')
meKing.say()     # 调用meking名字属性
>>>I am meKing 

 类的绑定是另一种绑定方法。类绑定方法用@classmethod来装饰

 

class L:
    name = '张三'
    def __init__(self, name):
        self.name = name
    @classmethod
    def say(self):
        print(f'I am {self.name}')    # 默认类自己熟悉
meKing = L('meKing')
meKing.say()   
>>>I am 张三 

  非绑定方法:@staticmethod

class L:
    name = '张三'
    def __init__(self, name):
        self.name = name
    @staticmethod    #非绑定方法
    def say(self='李四'):   #self只是和普通函数一样的一个形参。
        print(f'I am {self}')
meKing = L('meKing')
meKing.say() 
>>>  I am 李四

 

 

  

posted @ 2019-07-24 20:37  莫比乌斯环s  阅读(128)  评论(0编辑  收藏  举报