多态/封装

多态


    # 多态 python 天生支持多态
# def func(int num,str name):
#     pass
#
# func('alex',2)
# class Payment:pass

# class Alipay():
#     def pay(self,money):
#         print('已经用支付宝支付了%s元' % money)
#
# class Applepay():
#     def pay(self,money):
#         print('已经用applepay支付了%s元' % money)
#
# def pay(pay_obj,money):  # 统一支付入口  归一化设计
#     pay_obj.pay(money)
#
# pay()

# 什么是多态
# python 动态强类型的语言
# 鸭子类型
# list tuple
# 不崇尚根据继承所得来的相似
# 我只是自己实现我自己的代码就可以了。
# 如果两个类刚好相似,并不产生父类的子类的兄弟关系,而是鸭子类型
# list tuple 这种相似,是自己写代码的时候约束的,而不是通过父类约束的
# 优点 : 松耦合 每个相似的类之间都没有影响
# 缺点 : 太随意了,只能靠自觉

# class List():
#     def __len__(self):pass
# class Tuple():
#     def __len__(self):pass
#
# def len(obj):
#     return obj.__len__()
#
# l = Tuple()
# len(l)
#
# # 强类型语言     多态
# # python 语言    鸭子类型


# 接口类和抽象类 在python当中的应用点并不是非常必要









私有属性

# 广义上面向对象的封装 :代码的保护,面向对象的思想本身就是一种
# 只让自己的对象能调用自己类中的方法

# 狭义上的封装 —— 面向对象的三大特性之一
# 属性 和 方法都藏起来 不让你看见
class Person:
    __key = 123  # 私有静态属性
    def __init__(self,name,passwd):
        self.name = name
        self.__passwd = passwd   # 私有属性

    def __get_pwd(self):         # 私有方法
        return self.__passwd   #只要在类的内部使用私有属性,就会自动的带上_类名

    def login(self):          # 正常的方法调用私有的方法
        self.__get_pwd()

alex = Person('alex','alex3714')
print(alex._Person__passwd)   # _类名__属性名
print(alex.get_pwd())

# 所有的私有 都是在变量的左边加上双下划綫
    # 对象的私有属性
    # 类中的私有方法
    # 类中的静态私有属性
# 所有的私有的 都不能在类的外部使用












封装


 class Room:
    def __init__(self,name,length,width):
        self.__name = name
        self.__length = length
        self.__width = width
     def get_name(self):
         return self.__name
     def set_name(self,newName):
         if type(newName) is str and newName.isdigit() == False:
             self.__name = newName
         else:
             print('不合法的姓名')
     def area(self):
         return self.__length * self.__width

 jin = Room('金老板',2,1)
 print(jin.area())
 jin.set_name('2')
 print(jin.get_name())

# 假设父类的私有属性 能被 子类调用么
class Foo:
     __key = '123'       # _Foo__key

 class Son(Foo):
     print(Foo.__key)     # _Son__key


# 会用到私有的这个概念de场景
#1.隐藏起一个属性 不想让类的外部调用
#2.我想保护这个属性,不想让属性随意被改变
#3.我想保护这个属性,不被子类继承


猜你喜欢

转载自blog.csdn.net/qq_37493425/article/details/88067002