面向对象:多态和封装

多态指的是一类事物有多种形态: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#被封装起来,无法调用,会报错

猜你喜欢

转载自www.cnblogs.com/aizhinong/p/11469155.html
今日推荐