面向对象
面先对象编程(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 李四