面向对象
一. 面向对象的编写
面向对象编写的方法
方式一:归类+提取公共值
方式二:在指定类中编写和当前类相关的所有代码 + 提取公共值
class People: def __init__(self,name,age,gender): # 特殊的方法,如果 类名() ,则该方法会被自动执行, # 目的进行数据初始化 (构造方法).通过构造方法,可以将数据进行打包,以后使用时,去其中获取即可. self.n1 = name self.n2 = age self.n3 = gender def kc(self): data = "%s,性别%s,今年%s岁,喜欢吃" %(self.n1,self.n3,self.n2) print(data) def db(self): data = "%s,性别%s,今年%s岁,喜欢玩" %(self.n1,self.n3,self.n2) print(data) def bj(self): data = "%s,性别%s,今年%s岁,喜欢喝" %(self.n1,self.n3,self.n2) print(data) obj = People('老狗',20,'男') # 创建了一个对象/实例化一个对象, 将数据封装到对象中,以供自己在方法中调用, 还可以把封装了数据的对象供其他函数使用 obj.kc() # 通过对象调用其中一个方法 # obj是对象, db()是方法 obj.db() obj.bj()
二. 面向对象的三大特性:封装/继承/多态
封装:
将相关功能封装到一个类中:
class Message: def email(self):pass def msg(self):pass def wechat(self):pass
将数据封装到一个对象中:
class Person: def __init__(self,name,age,gender): self.name = name self.age = age self.gender = gender
继承: 原则:现在自己类中找,没有就去父类找. 父类和子类是相对的.
在方法中有self.f2时, 如果其他的类中也有f2()这个方法, 按照调用的对象的继承的顺序来看是调用哪个方法
支持多继承(先找左/再找右), 多继承可以提高代码重用性 class Foo(Base, SuperBase): pass
class SuperBase: def f3(self): print('f3') class Base(SuperBase): # 父类,基类 def f2(self): print('f2') class Foo(Base): # 子类,派生类 def f1(self): print('f1') obj = Foo() obj.f1() obj.f2() obj.f3()
多态:
多种形态或多种状态, 由于python原生支持多态,所以没有特殊性