一.接口类,抽象类定义:制定一个规范
例如: 强制制定一个规范,凡是继承我的类中必须有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()