Python-100-Days/Jax_code/Day8/Note.md

1.8 KiB
Raw Blame History

访问可见性问题

对于上面的代码有C++、Java、C#等编程经验的程序员可能会问,我们给Student对象绑定的nameage属性到底具有怎样的访问权限也称为可见性。因为在很多面向对象编程语言中我们通常会将对象的属性设置为私有的private或受保护的protected简单的说就是不允许外界访问而对象的方法通常都是公开的public因为公开的方法就是对象能够接受的消息。在Python中属性和方法的访问权限只有两种也就是公开的和私有的如果希望属性是私有的在给属性命名时可以用两个下划线作为开头下面的代码可以验证这一点。

class Test:

    def __init__(self, foo):
        self.__foo = foo

    def __bar(self):
        print(self.__foo)
        print('__bar')


def main():
    test = Test('hello')
    # AttributeError: 'Test' object has no attribute '__bar'
    test.__bar()
    # AttributeError: 'Test' object has no attribute '__foo'
    print(test.__foo)


if __name__ == "__main__":
    main()

面向对象的支柱

面向对象有三大支柱:封装、继承和多态。后面两个概念在下一个章节中进行详细的说明,这里我们先说一下什么是封装。我自己对封装的理解是"隐藏一切可以隐藏的实现细节,只向外界暴露(提供)简单的编程接口"。我们在类中定义的方法其实就是把数据和对数据的操作封装起来了,在我们创建了对象之后,只需要给对象发送一个消息(调用方法)就可以执行方法中的代码,也就是说我们只需要知道方法的名字和传入的参数(方法的外部视图),而不需要知道方法内部的实现细节(方法的内部视图)。