python神秘的魔法函式 python的魔法函式

2021-10-12 14:06:48 字數 2929 閱讀 9216

_init_()

所有類的超類object,有乙個預設包含pass的init()實現,這個函式會在物件初始化的時候呼叫,我們可以選擇實現,也可以選擇不實現,一般建議是實現的,不實現物件屬性就不會被初始化,雖然我們仍然可以對其進行賦值,但是它已經成了隱式的了,程式設計時顯示遠比隱式的更好。

class employee:

'所有員工的基類'

empcount = 0

def __init__(self, name, salary):

self.name = name

self.salary = salary

employee.empcount += 1

def displaycount(self):

print "total employee %d" % employee.empcount

def displayemployee(self):

print "name : ", self.name, ", salary: ", self.salary

_str_()

class cat:

... def __init__(self,age,***):

... self.age = age

... self.*** = ***

... def __str__(self):

... return "年齡是:%s , 性別是:%d" % (self.age, self.***)

x = cat(34,'human')

print(x)

年齡是:34 , 性別是:human

總結幾點:

1、在python彙總方法名如果是***()格式的,就代表著這個方法名具有特殊的功能,也稱為「魔法」方法;

2、當使用「print()」方法的時候,一旦定義了str(self)方法,那麼就會讓該類例項物件被print呼叫時返回類的特定資訊,即return方法後的語句。

_call_()

將例項變成函式可呼叫的物件。

class person(object):

def __init__(self, name, gender):

self.name = name

self.gender = gender

def __call__(self, friend):

print 'my name is %s...' % self.name

print 'my friend is %s...' % friend

>>> p = person('bob', 'male')

>>> p('tim')

my name is bob...

my friend is tim...

python name == 『main』詳細解釋

一.語**釋

1.__name__

name 是python的內建屬性,是系統全域性變數!每乙個py檔案都有乙個屬於自己的name:

如果py檔案作為模組被匯入(import),那麼name就是該py檔案的檔名(也稱 模組名);

如果py檔案直接執行時(ctrl+shift+f10),那麼name預設等於字串」main」;

舉個簡單的例子:假如你名字是張三,在朋友眼中,你是張三(__name__ == '張三');在你自己眼中,你是你自己(__name__ == '__main__')

就是有這種操作

2.」__main__」

「_ main _」 實際上就是乙個字串,用來鑑別程式入口,沒有太多花裡胡哨的東西.

3.name == 「main」

當.py檔案被直接執行時, if name == 「main」 之下的**塊將被執行,該語句就相當與python的main主函式入口,示例**如下:

a.新建乙個 my_name.py 檔案,作為模組檔案:

# 定義乙個函式並列印 __name__

def prit_name():

print("my_name.py __name__:", __name__)

if __name__ == "__main__":

prit_name()

b.新建乙個 python_main.py 檔案,作為啟動檔案 (ctrl+shift+f10):

# 匯入 my_name 模組

import my_name

# 定義乙個函式並列印 __name__

def prit_name():

my_name.prit_name()

print("python_main.py __name__:", __name__)

if __name__ == "__main__":

prit_name()

輸出結果:

my_name.py __name__: my_name

python_main.py __name__: __main__

由此可見,作為啟動檔案 python_main.py ,該檔案的內建屬性 name 等於 「main」,而my_name.py 作為匯入模組,該模組的 name 等於檔名(也稱模組名字),所以my_name.py 中的 表示式 if name == 「main」 並不成立!

當直接將my_name.py作為啟動檔案時,輸出:

my_name.py __name__: __main__

如果py檔案作為模組被匯入(import),那麼name就是該py檔案的檔名(也稱 模組名);

如果py檔案直接執行時,那麼name預設等於字串」main」;

廢話多二.作用

1.name == 「main」 作為啟動py檔案的main函式入口

2.乙個專案中必然會包含多個模組檔案,每個模組檔案在自己寫完**之後會做一些簡單的測試用於檢測bug 或者 對自己的函式呼叫寫乙個簡單的示例,而恰到好處的是:name == 「main」 既不會影響你的測試**,也不會影響別人呼叫你的介面函式。

python的魔法函式

所以還是老老實實的把自己的基本功練好,物件導向玩的爐火純青,其他的不過是稍加訓練,跟賣藝的學幾招也能稱霸一片天。哈哈 牛吹的太過了,還是回到正題,總結分享一下一些稍微不太熟悉的魔法方法。一 str 它表示的是直接列印物件實現的方法,str 是被print函式呼叫的,一般都是返回乙個值,這個值是以字串...

python的魔法函式

所以還是老老實實的把自己的基本功練好,物件導向玩的爐火純青,其他的不過是稍加訓練,跟賣藝的學幾招也能稱霸一片天。哈哈 牛吹的太過了,還是回到正題,總結分享一下一些稍微不太熟悉的魔法方法。一 str 它表示的是直接列印物件實現的方法,str 是被print函式呼叫的,一般都是返回乙個值,這個值是以字串...

python魔法函式

python中魔法函式簡單上來說就是在構建某個類的時候,給類定義一些初始的方法,來實現類物件的某些屬性或者方法而準備。其形式如下,下雙劃線開頭雙劃線結尾 初始化乙個學生class class student def init self,students list self.students list...