python面向对象-封装and多态

python 接口类和抽象类

为什么讲封装之前要将这个东西? 我才不会说为什么

首先:

  python没有接口类这个概念!!!!!!!!

哈哈哈......神经病

python抽象类和接口类更接近于一种规范,例如,我吃苹果,吃香蕉,吃梨,这些我都可以统一归到吃水果这个类中,但是我能吃到这个水果吗?????  水果这个笼统的东西我能吃到吗,我只能吃到具体的香蕉什么的.........

这个规范不止一个,可以制定多个! 应该能明白这个意思吧.......

from abc import ABCMeta,abstractmethod

class Payment(mteaclass = ABCMeta):
@abstractmethod
def pay(self): pass
# @abstractmethod
# def func(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 Wechatpay(Payment):
def __init__(self,money):
self.money = money

def pay(self):
print('使用了微信支付了%s元' % self.money)

def pay(obj):
obj.pay()

print('''

w1 = Wechatpay(200)
a1 = Alipay(100)
pay(a1)
pay(w1)

''')
 
   

这就是规范化,统一化设计

这个格式是固定的

在下面统一一个接口

 这样的一段代码就实现了对程序的归一化设计,不按照格式来编写程序就会报错

封装

广义的封装: 实例化 一个对象,对象空间封装一些属性

狭义的封装: 私有制

对于私有静态字段,类的外部不能访问 

类名不能访问私有静态字段

对于私有静态字段来说,只能在本类内部访问,类的外部,派生类均不可访问(其实可以访问,只不过访问的方式算是python的一个bug)

私有成员: 私有惊天字段, 私有方法,私有对象属性

class B:
__money = 1000 # 私有静态字段

class A(B):
name = 'alex'
__age = 20 # 私有静态字段

def func(self):
print(self.__age)
print(A.__age) # 对于私有静态字段,类的内部可以访问
print('func...')
def func1(self):
print(self.__money)
print(A.__money)

a1 = A()
print(a1.name)
print(A.name)

print('''

print(a1.__age) # 实例化对象不能访问私有静态字段
print(A.__age) # 类名不能访问私有静态字段
# 对于私有静态字段,类的外部不能访问
a1.func()

# 有一个方法可以访问,但是这是python的一个bug

print(A._A__age)
''')

多态

python处处是多态!!!!!!!!!!

python中没有多态的概念!!!!!!!!!

.......扑哧........

(你放佛在刻意逗我笑)

嘛,这两句话都没有毛病,python确实没有多态的概念,它有的就是鸭子类型

什么叫鸭子类型? 

鸭子类型: 看着像鸭子,他就是鸭子

# python中没有多态. 但是他有鸭子类型
# 鸭子类型,: 看着像鸭子, 那么他就是鸭子
# 互看为鸭子类型的数据都有:
class Str:
def index(self):
pass

class List:
def index(self):
pass

class Tuple:
def index(self):
pass

print('''
这些类,都互称鸭子类型
其中方法名可以自由更改,任意变换,但是一般不要这样做
''')

猜你喜欢

转载自www.cnblogs.com/ALADL/p/9372442.html