多态指的是一类事物有多种形态:python天生支持多态
例如:
class Wechat: def pay(self,money): print('支付%s钱'%money) class Alipay: def pay(self,money): print('支付%s钱'%money) class Applepay: def pay(self,money): print('支付%s钱'%money) # python中直接调用传参给payment即可调用上方所有类的方法 def pay(payment,maoney): payment.pay(maoney)
多态:在java中,由于是强数据类型,调用这些类需要给他们创建一个父类,意思就是允许将子类类型的指针赋值给父类类型的指针
class Payment:#父类 pass class Wechat(Payment): def pay(self,money): print('支付%s钱'%money) class Alipay(Payment): def pay(self,money): print('支付%s钱'%money) class Applepay(Payment): def pay(self,money): print('支付%s钱'%money) def pay(Payment payment,int maoney):#这里的Payment是父类Payment,在java中只有这样才能使用到子类Wechat等 payment.pay(maoney)
封装:
广义:面向对象的封装是对代码的保护,面向对象的思想本身就是一种,只让自己的对象能调用自己类中的方法就是一种封装
狭义:是面向对象的三大特性之一,属性和方法都藏起来,不让你能在外部调用,让你看不见
使用方法:名字前面加双下划线
class Person: def __init__(self,name,money): self.name = name self.__money = money #被封装,可以在类里使用 def __drawing(self): #被封装,可以在类里使用 print('我画画很好,但是保密') def func(self): self.__drawing() #调用被封装的方法 print(self.__money) #调用被封装的属性 aike = Person('aike',1000) print(aike.name) print(aike.__dict__)#被封装的属性以类名加属性的名字存在字典当中 print(aike._Person__money)#用key可以查看被封装的值,但是不建议这样使用 aike.func()#调用正常方法 print(aike.money)#被封装起来,无法调用,会报错 aike.__drawing#被封装起来,无法调用,会报错