您的位置: 网站首页> python面向对象> 当前文章

广义|狭义封装,私有属性私有方法(双前导下划线)

老董-我爱我家房产SEO2020-04-05152围观,140赞

  广义的封装

  面向对象把函数和方法都写在的类里,在类外面我们无法直接用,这就算1种广义的封装。

  狭义的封装

  对象的某些属性或方法只允许在对象的内部被使用,不希望在类外部被查看或者修改,这就是狭义的封装。这样的属性和方法我们叫他私有属性和私有方法

  无论是实例属性实例方法还是类属性类方法,都可以进行封装私有化。

  新手可能会奇怪定义类就是让使用的,为何还要封装保护起来?其实封装与否要结合实际业务场景。比如一个类的属性涉及到账户余额、密码,那肯定不能随便修改,所以代码层面要提供一套安全的机制,至于哪些属性和方法会被封装起来完全看业务情形。

  php语言有private修饰符来定义私有属性和方法,python并没有类似的关键字。python中要实现这个效果可以把类中的变量和函数命名为以双下画线开头双前导下划线双下划线只在左侧,右侧没有),这样就不能直接访问。

# -*- coding:utf-8 -*-


class Person:

    __Country = 'chinese' # 类外不可访问

    def __init__(self, name,blood):
        self.name = name
        self.__blood = blood  # 类外不可访问

    # 类外不可访问
    def __skill(self):
        print('十八般武器样样精通')

    # 类内部可以访问私有方法,属性
    def say(self):
        print(f'{self.name}爱好{self.__blood}')
        self.__skill()


if __name__ == "__main__":
    p = Person('悟空',1000)
    print(p.name)
    p.say()
    print(p.__hobby) # 外面不可以访问

悟空
悟空爱好1000
十八般武器样样精通
Traceback (most recent call last):
  File "D:/py3script/python66/object/12_1_1.py", line 26, in <module>
    print(p.__hobby) # 外面不可以访问
AttributeError: 'Person' object has no attribute '__hobby'


  封装需要从两个方面来考虑

  1.将对象的属性和实现细节隐藏起来,不允许外部直接访问。

  2.把方法暴露出来,让方法来控制对这些属性进行安全的访问和操作。

  封装的优点

  1.良好的封装能够减少耦合。

  2.类内部的结构可以自由修改。

  3.可以对成员变量进行更精确的控制。

很赞哦!

python编程网提示:转载请注明来源www.python66.com。
有宝贵意见可添加站长微信(底部),获取技术资料请到公众号(底部)。同行交流请加群 python学习会

文章评论

    广义|狭义封装,私有属性私有方法(双前导下划线)文章写得不错,值得赞赏

站点信息

  • 网站程序:Laravel
  • 客服微信:a772483200