Python中_,__,__xx__的區別

_xx 單下劃線開頭python

Python中沒有真正的私有屬性或方法,能夠在你想聲明爲私有的方法和屬性前加上單下劃線,以提示該屬性和方法不該在外部調用.若是真的調用了也不會出錯,但不符合規範.ide

#! /usr/bin/python

def singleton(cls):
        _instance = {}    # 不建議外部調用
        def _singleton(*args, **kargs):
                if cls not in _instance:
                        _instance[cls] = cls(*args, **kargs)
                return _instance[cls]
        return _singleton

@singleton
class A(object):
        a = 1
        def __init__(self, x = 0):
                self.x = x

a1 = A(2)
a2 = A(3)

print id(a1)
print id(a2)
print a1.x
print a2.x

__ xx 雙下劃線開頭學習

雙下劃線開頭,是爲了避免讓子類重寫該屬性方法.經過類的實例化時自動轉換,在類中的雙下劃線開頭的屬性方法前加上」_類名」實現.spa

#! /usr/bin/python
# -*- coding: utf-8 -*-
''' 遇到問題沒人解答?小編建立了一個Python學習交流QQ羣:778463939 尋找有志同道合的小夥伴,互幫互助,羣裏還有不錯的視頻學習教程和PDF電子書! '''

class A(object):

        def __init__(self, x):
                self.__a = 2
                self.x = x

        def __b(self):
                self.x = 3

a = A(2)
# 會報錯,"AttributeError: 'A' object has no attribute '__a'"
# print a.x, a.__a 
print a.x, a._A__a
a._A__b()
print a.x

__ xx __code

此種寫法爲Python內建屬性方法,最好不要在外部調用視頻

相關文章
相關標籤/搜索