美文网首页
Python 类的私有化

Python 类的私有化

作者: Devops海洋的渔夫 | 来源:发表于2019-01-14 21:14 被阅读10次

私有化

  • xx: 公有变量
  • _x: 单前置下划线,私有化属性或方法,from somemodule import *禁止导入,类对象和子类可以访问
  • __xx:双前置下划线,避免与子类中的属性命名冲突,无法在外部直接访问(名字重整所以访问不到)
  • __xx__:双前后下划线,用户名字空间的魔法对象或属性。例如:init , __ 不要自己发明这样的名字
  • xx_:单后置下划线,用于避免与Python关键词的冲突

通过name mangling(名字重整(目的就是以防子类意外重写基类的方法或者属性)如:_Class__object)机制就可以访问private了。

#coding=utf-8

class Person(object):
    def __init__(self, name, age, taste):
        self.name = name
        self._age = age 
        self.__taste = taste

    def showperson(self):
        print(self.name)
        print(self._age)
        print(self.__taste)

    def dowork(self):
        self._work()
        self.__away()


    def _work(self):
        print('my _work')

    def __away(self):
        print('my __away')

class Student(Person):
    def construction(self, name, age, taste):
        self.name = name
        self._age = age 
        self.__taste = taste

    def showstudent(self):
        print(self.name)
        print(self._age)
        print(self.__taste)

    @staticmethod
    def testbug():
        _Bug.showbug()

# 模块内可以访问,当from  cur_module import *时,不导入
class _Bug(object):
    @staticmethod
    def showbug():
        print("showbug")

s1 = Student('jack', 25, 'football')
s1.showperson()
print('*'*20)

# 无法访问__taste,导致报错
# s1.showstudent() 
s1.construction('rose', 30, 'basketball')
s1.showperson()
print('*'*20)

s1.showstudent()
print('*'*20)

Student.testbug()

总结

  • 父类中属性名为__名字的,子类不继承,子类不能访问
  • 如果在子类中向__名字赋值,那么会在子类中定义的一个与父类相同名字的属性
    _名的变量、函数、类在使用from xxx import *时都不会被导入

关注微信公众号,回复【资料】、Python、PHP、JAVA、web,则可获得Python、PHP、JAVA、前端等视频资料。

相关文章

  • day15_python_类和对象

    属性的私有化 python中并没有真正的私有化!python 的类中默认的属性和方法都是公开的 1.私有化a.类中...

  • day014 笔记 08-01

    内置类的属性 python中每个类都拥有内置的类属性。 私有化 python中类中的属性和方法的私有化:直接在属性...

  • day13面向对象(1)

    01-内置类属性 内置类属性:python中每个类都拥有内置的类属性 02私有化 python中,类和属性的私有化...

  • Python进阶7

    元类编程 Python属性函数 引言 Python中我们对于自己设置的类,尽量要使其属性私有化,获得更好的封装性。...

  • day13-内置类属性、类的属性、getter和setter

    1.内置类属性 python中的每一类都有内置类属性 2.类中属性和方法的私有化 私有化:直接在方法或属性前面加"...

  • Python-day-13面向对象2

    一、内置类属性 二、私有化 python中类中的属性和方法的私有化:直接在属性名或者方法名前加' _ _ '(命名...

  • python面向对象2

    1.权限访问: 2.python中类的内容的访问权限 严格来说,python类中的内容只有公开的;私有化是假的私有...

  • Python 类的私有化

    私有化 xx: 公有变量 _x: 单前置下划线,私有化属性或方法,from somemodule import *...

  • day13-面向对象2

    1. 内置类属性 2. 私有化 python中类中的属性和方法的私有化:直接在属性名或者方法名前加__(命名以 '...

  • python入门系列:元类编程

    Python属性函数 引言 Python中我们对于自己设置的类,尽量要使其属性私有化,获得更好的封装性。 如果要访...

网友评论

      本文标题:Python 类的私有化

      本文链接:https://www.haomeiwen.com/subject/mycylqtx.html