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