python的三个特性:封装、继承、多态
封装:
将相关功能封装到一个类
将数据封装到一个对象(__init__)
# 1、功能的封装class Loy2: def testmethod1(self, name, data, gender): data = '%s%s%stest1' % (name, data, gender) print(data) def testmethod2(self, name, data, gender): data = '%s%s%stest2' % (name, data, gender) print(data) def testmethod3(self, name, data, gender): data = '%s%s%stest3' % (name, data, gender) print(data)obj1 = Loy2()obj1.testmethod1('别人', '明天', '上班')obj1.testmethod2('别人', '明天', '上班')obj1.testmethod3('别人', '明天', '上班')# 2、优化版本(参数的打包)class Loy: def __init__(self, a, b, c): self.n1 = a self.n2 = b self.n3 = c def testmethod1(self): data = '%s%s%stest1' % (self.n1, self.n2, self.n3) print(data) def testmethod2(self): data = '%s%s%stest2' % (self.n1, self.n2, self.n3) print(data) def testmethod3(self): data = '%s%s%stest3' % (self.n1, self.n2, self.n3) print(data)obj = Loy('我自己', '今天', '去打牌')obj.testmethod1()obj.testmethod2()obj.testmethod3()
继承:
继承的目的是为了复用
多继承:
不同于其他语言,在python中,一个派生类可以继承多个基类,多继承(先找左,再找右),多继承可以提高复用性
class Base1: def f1(self): print('base1.f1') def f2(self): print('base1.f2')class Base2: def f1(self): print('base2.f1') def f2(self): print('base2.f2') def f3(self): print('base2.f3') self.f1()class Foo(Base1, Base2): def f0(self): print('foo.f0') self.f3()obj = Foo()obj.f0()
以上代码打印结果为
当运行obj对象的f0方法时,首先在本身的Foo类中寻找f0打印第一行。然后f0中调用了f3,f3在Foo类中没有,然后在继承
的Base1类中找f3,没找到。然后在Base2类中找f3。打印第二行。然后f3调用了f1(注意:此时self.f3()中的self指向依旧是obj)。
然后Foo类中没有找到f1,然后在Base1类中找到,打印第三行,至此结束。
多态:
# 关于多态,网上的说法众说纷纭,Google了半天。发现大佬们说的都过于抽象。鉴于我自己还不是个老油条。后续醍醐灌顶之后再补充。
多种形态或者多种状态,多态可以增加代码的灵活度。
鸭子模型:在鸭子类型中,关注的不是对象的类型本身,而是它是如何使用的
class Base(object): def fun(self): print('这是一个基类')class Foo(Base): def fun(self): Base.fun(self) print('这是派生类1')class Foo2(Base): def fun(self): Base.fun(self) print('这是派生类2')a = Base()b = Foo()c = Foo2()a.fun()b.fun()c.fun()'''打印结果如下:这是一个基类这是一个基类这是派生类1这是一个基类这是派生类2'''
以上就是个人对于python基础三大特性的了解。如有问题,欢迎指正。