20180726 (面向对象:接口类和抽象类 多态 封装)
一.接口类,抽象类定义:制定一个规范
例如: 强制制定一个规范,凡是继承我的类中必须有pay方法,如果没有实例化对象的时候就会报错
from abc import ABCMeta,abstractmethod (抽象类,接口类)
class Payment(metaclass=ABCMeta):
@abstractmethod
def pay(self): ======>抽象类(接口类) 制定一个规范
pass
class Alipay(Payment):
def __init__(self,money):
self.money = money
def pay(self):
print("使用支付宝支付%s" % self.money)
class Jdpay(Payment):
def __init__(self,money):
self.money = money
def pay(self):
print("使用京东支付了%s" % self.money)
class QQpay(Payment):
def __init__(self,money):
self.money = money
def pay(self):
print("使用QQ支付了%s" % self.money)
def pay(obj): =======>归一化设计
obj.pay()
a1 = Alipay(100)
j1 = Jdpay(200)
q1 = QQpay(300)
a1.pay()
j1.pay()q1.pay()
二.python 面向对象的三大特征之一:
多态:python处处是多态
python中没有多态,他有鸭子类型(python中大量存在)
鸭子类型:看着像鸭子,他就是鸭子 (统一化规范)
例如: 这些类都成为鸭子
class Str:
def index(self):
pass
class List:
def index(self):
pass
class Tuple:
def index(self):
pass
三.封装
广义的封装:实例化一个对象,给对象空间封装一些属性
狭义的封装:私有制 (只能自己调用,或者是某些对象可以调用)
私有成员:私有静态变量 私有方法 私有对象属性
例如:
__iphone="123456" 私有静态变量(字段)
def __func(self):
print(666) 私有方法
def __init__(self,name):
self.__name = name 私有对象属性
私有静态变量(字段): 只能在本类中内部访问,类的外部以及派生类都不可以访问
例如: print(A._A__age) 可以访问(但是不要使用)
class A:
name = "slex"
__age = 100
def func(self):
print(a1.__age) ======>对于私有静态字段(变量),类的内部可以访问
print(A.__age)
print("123")
a1 = A()
a1.func()
#print(a1.__age) ======>实例化对象不能访问私有静态字段
#print(A.__age) ======>类名不能访问私有静态字段
私有方法: 类的内部可以访问 (类的外部,类的派生类不可以访问)
例如:
class Dog:
def __eat(self):
print("会吃饭")
def func(self):
self.__eat()
print("123")
d1 = Dog()
d1.func()
私有对象属性: 类的内部可以访问 (类的外部和派生类不可以访问)
class Dog:
def __init__(self,name): 私有对象属性
self.__name = name
def __eat(self): 私有方法
print("会吃饭")
def func(self):
self.__eat()
print("123")
def xinxi(self):
print("该狗名字叫%s" % self.__name)
d1 = Dog("球球")
d1.func()
d1.xinxi()