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()

原文地址:https://www.cnblogs.com/lhy979/p/9373110.html