Cris 的Python笔记(十一):面向对象三大特征之多态

版权声明:转载请注明出处~ 摸摸博主狗头 https://blog.csdn.net/cris_zz/article/details/83816899
'''
Python 的多态:一个对象可以以不同的形态去呈现,实现方式相比 Java更加简单
因为动态语言的特点,Python 无法实现在代码指向前对方法参数进行检查,所以只要满足指定方法体的要求,任何数据类型的对象都可以作为该方法的实参
'''

class A:
    def __init__(self, name):
        self._name = name

    @property
    def name(self):
        return self._name

    @name.setter
    def name(self, name):
        self._name = name


a = A("cris")
print(a.name)


class B:
    def __init__(self, name):
        self._name = name

    @property
    def name(self):
        return self._name

    @name.setter
    def name(self, name):
        self._name = name

    def __len__(self):
        return 20


b = B('simida')
print(b.name)

# 只要对象中含有name 属性,那么就可以当作参数传递


def getName(obj):
    print(obj.name)


getName(a)
getName(b)


def getName2(obj):
    if isinstance(obj, A):
        print(obj.name)


getName2(a)
getName2(b)     # 没有输出


# len()
# 之所以一个对象能通过len()来获取长度,是因为对象中具有一个特殊方法__len__
# 换句话说,只要对象中具有__len__特殊方法,就可以通过len()来获取它的长度
nums = [1, 2, 3]
print(len(nums))    # 3
name = 'james'
print(len(name))    # 5
print(len(b))   # 20

# 面向对象的三大特征:
#   封装
#       - 确保对象中的数据安全
#   继承
#       - 保证了对象的可扩展性
#   多态
#       - 保证了程序的灵活性

猜你喜欢

转载自blog.csdn.net/cris_zz/article/details/83816899