#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @time : 2017/11/08 8:46
# @author : lijunjiang
# @file : class3.py
"""類的私有變數和私有方法
在python中可以通過在屬性變數名前加上雙下劃線定義屬性為私有屬性
特殊變數命名
1、 _xx 以單下劃線開頭的表示的是protected型別的變數。即保護型別只能允許其本身與子類進行訪問。若內部變數標示,如: 當使用「from m import」時,不會將以乙個下劃線開頭的物件引入 。
2、 __xx 雙下劃線的表示的是私有型別的變數。只能允許這個類本身進行訪問了,連子類也不可以用於命名乙個類屬性(類變數),呼叫時名字被改變(在類foobar內部,__boo變成_foobar__boo,如self._foobar__boo)
3、 __xx__定義的是特列方法。使用者控制的命名空間內的變數或是屬性,如init , __import__或是file 。只有當文件有說明時使用,不要自己定義這類變數。 (就是說這些是python內部定義的變數名)
在這裡強調說一下私有變數,python預設的成員函式和成員變數都是公開的,沒有像其他類似語言的public,private等關鍵字修飾.但是可以在變數前面加上兩個下劃線"_",這樣的話函式或變數就變成私有的.這是python的私有變數軋壓(這個翻譯好拗口),英文是(private name mangling.) **情況就是當變數被標記為私有後,在變數的前端插入類名,再類名前新增乙個下劃線"_",即形成了_classname__變數名.**
python內建類屬性
__dict__ : 類的屬性(包含乙個字典,由類的資料屬性組成)
__doc__ :類的文件字串
__module__: 類定義所在的模組(類的全名是'__main__.classname',如果類位於乙個匯入模組mymod中,那麼classname.__module__ 等於 mymod)
__bases__ : 類的所有父類構成元素(包含了乙個由所有父類組成的元組)
"""class pub():
_name = 'protected型別的變數'
__info = '私有型別的變數'
def _func(self):
print("這是乙個protected型別的方法")
def __func2(self):
print('這是乙個私有型別的方法')
def get(self):
return(self.__info)
a = pub()
print(a._name)
a._func()
# print(a.info)
# 執行結果:
# protected型別的變數
# 這是乙個protected型別的方法
# protected型別的變數和方法 在類的例項中可以獲取和呼叫
# # print(a.__info)
# # a.__func2()
# 執行結果:
# file "d:/python/class/class3.py", line 46, in # print(a.__info)
# # attributeerror: pub instance has no attribute '__info'
# a.__func2()
# attributeerror: pub instance has no attribute '__func2'
# 私有型別的變數和方法 在類的例項中獲取和呼叫不到
# 獲取私有型別的變數
print(a.get())
# 執行結果:私有型別的變數
# 如果想要在例項中獲取到類的私有類形變數可以通過在類中宣告普通方法,返回私有類形變數的方式獲取
print(dir(a))
# 執行結果:['__doc__', '__module__', '_func', '_name', '_pub__func2', '_pub__info', 'get']
print(a.__dict__)
# 執行結果:{}
print(a.__doc__)
# 執行結果: none
print(a.__module__)
# 執行結果:__main__
print(a.__bases__)
# 執行結果:
# print(a.__bases__)
# attributeerror: pub instance has no attribute '__bases__'
** Python類的重寫和私有變數
class parent object 定義父類的時候,一定要寫繼承object類,否則會報錯 name parent f def init self address,age self.address address self.age age print my name is format self...
類的私有變數
1.在python 中可以通過在屬性變數名前加上雙下劃線定義屬性為私有屬性 特殊變數命名 案例 class a object zhe shi shuo ming name ling man def hello self print self.name print self.def get self ...
python類的重寫 私有變數
類的重寫 在python中 有時需要進行重寫,重寫是繼承機制中的乙個重要部分,可以重寫一般方法也可以重寫構造方法,構造方法是用來初始化新建立物件的狀態。class parent object name parent age 100 def init self print my name is par...