1. 程式人生 > >Python3 與 C# 擴充套件之~模組專欄

Python3 與 C# 擴充套件之~模組專欄

3.控制可使用的函式、變數、類

3.1.通過私有來控制

在一個模組中,我們可能會定義很多函式和變數,但有的函式和變數我們希望給別人使用,有的函式和變數我們希望僅僅在模組內部使用。在Python中,是通過_字首來實現的

小明同學基礎功底紮實,看見標題小明就樂了,前面看了這麼多案例瞬間秒懂,大叫道~”等一下~~~我來寫demo,要是不行請你們吃晚飯~“

寫下了如下程式碼:

test3.py

def test1():
    print("test1")


def _test2():
    print("test2")


def __test3():
    print
("test3")

呼叫程式碼:

import test3

test3.test1()
test3._test2()
test3.__test3()

結果:

test1
test2
test3

大家大眼瞪小眼的看著小明,嘴角邊露出了陰謀的味道~

這下小明傻眼了,難道老師之前類的私有系列講錯了?

小平瞥了小明一眼說道,你自己的開啟方式不對還怪老師咯?看我給你改改~

呼叫程式碼:

from test3 import *

test1()
_test2()
__test3()

小明執行後就傻眼了,心想到,課代表這個宿舍臥虎藏龍啊,下次少來點,不然這點老底就被他們吃空了

NameError: name '_test2' is not defined

註釋掉_test2()執行結果: NameError: name '__test3' is not defined

小明有點尷尬,然後轉了個話題,說道:”那import不是無敵了?我們的私有不給力啊?“

偉哥語重心長的說道:

類似_xxx__xxx這樣的函式或變數就是非公開的(private),不應該被直接引用

之所以我們說,“不應該”被直接引用,而不是“不能”被直接引用,是因為Python並沒有一種方法可以完全限制訪問private函式或變數

比如小明的那種方式就可以直接使用了,但是從程式設計習慣上不應該引用private函式或變數。

我們平時使用的時候:

外部不需要引用的函式全部定義成private,只有外部需要引用的函式才定義為public,然後匯入的時候儘量使用from ... import

3.2.通過__all__來控制

來個案例即可:

test4.py

__all__ = ["Dog", "test1", "name"]

class Animal(object):
    pass

class Dog(Animal):
    pass

class Cat(Animal):
    pass

def test1():
    print("test1")

def test2():
    print("test2")

def test3():
    print("test3")

name = "小明"
age = "22"

效果:只有__all__列表裡面的才能被訪問 圖片

相關推薦

Python3 C# 擴充套件模組專欄

3.控制可使用的函式、變數、類¶ 3.1.通過私有來控制¶ 在一個模組中,我們可能會定義很多函式和變數,但有的函式和變數我們希望給別人使用,有的函式和變數我們希望僅僅在模組內部使用。在Python中,是通過_字首來實現的 小明同學基礎功底紮實,看見標題小明就樂了,前面看了這麼多案例瞬間秒懂,大叫道~

Python3 C# 擴充套件基礎衍生

Help on generator object: test = class generator(object) | Methods defined here: | | __del__(...) | | __getattribute__(self, name, /)

Python3 C# 擴充套件基礎拓展

終於期末考試結束了,聰明的小明同學現在當然是美滋滋的過暑假了,左手一隻瓜,右手一本書~正在給老鄉小張同學拓展他研究多日的知識點 1.NetCore裝飾器模式¶ 裝飾器這次從C#開始引入,上次剛講迭代器模式,這次把裝飾器模式也帶一波(純Python方向的可以選擇性跳過,也可以當擴充套件)

Python3 C# 面向對象異常相關

efi bsp sof 一個 name final href 場景 插件 周末多碼文,昨天晚上一篇,今天再來一篇: 在線編程:https://mybinder.org/v2/gh/lotapp/BaseCode/master 在線預覽:http://github.les

Python3 C# 並發編程 上篇

動態 ken summary using 任務調度 影響 特征 可能 arp NetCore並發編程 示例代碼:https://github.com/lotapp/BaseCode/tree/master/netcore/4_Concurrency 先簡單說下概念(其實之前

Python3 C# 網路程式設計 網路基礎篇

最新版本檢視:https://www.cnblogs.com/dotnetcrazy/p/9919202.html 入門篇 官方文件:https://docs.python.org/3/library/ipc.html(程序間通訊和網路) 例項程式碼:https://github.com/lotapp/

Python3 C# 併發程式設計 執行緒上篇

2.2.加強篇¶ 其實以前的Linux中是沒有執行緒這個概念的,Windows程式設計師經常使用執行緒,這一看~方便啊,然後可能是當時程式設計師偷懶了,就把程序模組改了改(這就是為什麼之前說Linux下的多程序程式設計其實沒有Win下那麼“重量級”),弄了個精簡版程序==>執行緒(核心是分不出程序

Python3 C# 併發程式設計程序先導篇

2.2.殭屍程序和孤兒程序¶ 先看看定義: 孤兒程序 :一個父程序退出,而它的一個或多個子程序還在執行,那麼那些子程序將成為孤兒程序。孤兒程序將被init程序(程序號為1)所收養,並由init程序對它們完成狀態收集工作。 殭屍程序 :一個程序使用fork建立子程序,如果子程序退出,而父程序並沒有

Python3 C# 併發程式設計 程序篇

NetCore併發程式設計¶  Python的執行緒、並行、協程下次說 先簡單說下概念(其實之前也有說,所以簡說下): 併發:同時做多件事情 多執行緒:併發的一種形式 並行處理:多執行緒的一種(執行緒池產生的一種併發型別,eg:非同步程式設計) 響應式程式設計:一種程式設計模式,對事件

Python3 C# 面向物件封裝

關於__name__在模組呼叫的時候會詳細說,你可以先這樣理解:如果直接執行py檔案就執行,別人呼叫那麼你的main就不執行了 標準寫法: # 1.匯入的模組 # 2.class的定義 # 3.其他方法定義 def main(): pass if __name__ ==

Python3 C# 面向物件異常相關

老師問了小明一聲,有幾個輸出? 小明驕傲的說道:“兩個,我寫了兩個異常處理,當然都執行了” 同學們又笑了,小潘調侃的說了句:“一看就知道去年C#沒好好學,這不都一樣嘛,遇到異常下面程式碼還執行嗎?用腦子好好想想” 當我們認為某些程式碼可能會出錯時,就可以用try來執行這段程式碼,如果執行出錯,則後續

Python3 C# 面向物件繼承多型

Python的多繼承最好是當C#或者Java裡面的介面使用,這樣結構不會混亂( 特殊情況除外) 來個例子: class Animal(object): pass class Flyable(object): """飛的方法""" pass class Ru

Python3 C# 基礎語法對比(List、Tuple、Dict、Set專欄

Help on class set in module builtins: class set(object) | set() -> new empty set object | set(iterable) -> new set object | | Build

Python3 C# 基礎語法對比(String專欄

using System; using System.Collections.Generic; using System.Linq; using System.Text.RegularExpressions; public static partial class ValidationHelp

Python3 C# 基礎語法對比(Function專欄

主要是普及一下Python基礎語法,對比著Net,新手更容易上手。 對比學習很有意思的,尤其是一些底層和思路 本來感覺函式要說的地方沒多少,細細一規劃,發現~還是單獨拉出一篇說說吧 之後就進入面向物件了,函式還是有必要了解一下的,不然到時候Class裡面的方法定義又要說了。 演示的

JavaC 個人比較

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

php實戰C擴充套件陣列

近來看了php的c擴充套件書寫,嘗試接入陣列處理,學會了幾個HashTable處理函式記錄如下: zend_hash_next_index_insert   插入資料(數字陣列或者關聯陣列); zend_hash_add 插入關聯陣列 zend_hash_index_upd

C語言第三戰!

  我與C語言第三戰之num1:將陣列A中的內容和陣列B中的內容進行交換。(陣列一樣大)   首先定義兩個陣列用以存放元素,為了更直觀的看到陣列內容進行了交換,先將之前定義的兩個陣列內容分別打印出來,然後利用for迴圈和中間變數,進行兩個陣列間元素的交換,最後進行列印即可。具體程式程式碼和執行結

Python3 C# 基礎語法對比(就當Python和C#基礎的普及吧)

['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global'

JavaC#個人比較

網上這方面的比較文章已經有不少了,不過大都是要麼從很高的角度說的,要麼就是從底層說的,本人就以自己這幾年的程式設計經歷中的感受,來談談自己的體會。 相似性: Java和C#都是一門面向物件的語言,Jav