_init_()
所有類的超類object,有一個默認(rèn)包含pass的init()實(shí)現(xiàn),這個函數(shù)會在對象初始化的時候調(diào)用,我們可以選擇實(shí)現(xiàn),也可以選擇不實(shí)現(xiàn),一般建議是實(shí)現(xiàn)的,不實(shí)現(xiàn)對象屬性就不會被初始化,雖然我們?nèi)匀豢梢詫ζ溥M(jìn)行賦值,但是它已經(jīng)成了隱式的了,編程時顯示遠(yuǎn)比隱式的更好。
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,sex):
... self.age = age
... self.sex = sex
... def __str__(self):
... return "年齡是:%s , 性別是:%d" % (self.age, self.sex)
x = cat(34,'human')
print(x)
年齡是:34 , 性別是:human
總結(jié)幾點(diǎn):
1、在Python匯總方法名如果是xxx()格式的,就代表著這個方法名具有特殊的功能,也稱為“魔法”方法;
2、當(dāng)使用“print()”方法的時候,一旦定義了str(self)方法,那么就會讓該類實(shí)例對象被print調(diào)用時返回類的特定信息,即return方法后的語句。
_call_()
將實(shí)例變成函數(shù)可調(diào)用的對象。
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’詳細(xì)解釋
一.語義解釋
1.__name__
name 是python的內(nèi)置屬性,是系統(tǒng)全局變量!每一個py文件都有一個屬于自己的name:
如果py文件作為模塊被導(dǎo)入(import),那么name就是該py文件的文件名(也稱 模塊名);
如果py文件直接運(yùn)行時(Ctrl+Shift+F10),那么name默認(rèn)等于字符串”main”;
舉個簡單的例子:假如你名字是張三,在朋友眼中,你是張三(__name__ == '張三');在你自己眼中,你是你自己(__name__ == '__main__')

2.”__main__”
“_ main _” 實(shí)際上就是一個字符串,用來鑒別程序入口,沒有太多花里胡哨的東西.
3.name == “main”
當(dāng).py文件被直接運(yùn)行時, if name == “main” 之下的代碼塊將被運(yùn)行,該語句就相當(dāng)與python的main主函數(shù)入口,示例代碼如下:
a.新建一個 my_name.py 文件,作為模塊文件:
# 定義一個函數(shù)并打印 __name__
def prit_name():
print("my_name.py __name__:", __name__)
if __name__ == "__main__":
prit_name()
b.新建一個 python_main.py 文件,作為啟動文件 (Ctrl+Shift+F10):
# 導(dǎo)入 my_name 模塊
import my_name
# 定義一個函數(shù)并打印 __name__
def prit_name():
my_name.prit_name()
print("python_main.py __name__:", __name__)
if __name__ == "__main__":
prit_name()
輸出結(jié)果:
my_name.py __name__: my_name
python_main.py __name__: __main__
由此可見,作為啟動文件 python_main.py ,該文件的內(nèi)置屬性 name 等于 “main”,而my_name.py 作為導(dǎo)入模塊,該模塊的 name 等于文件名(也稱模塊名字),所以my_name.py 中的 表達(dá)式 if name == “main” 并不成立!
當(dāng)直接將my_name.py作為啟動文件時,輸出:
my_name.py __name__: __main__
如果py文件作為模塊被導(dǎo)入(import),那么name就是該py文件的文件名(也稱 模塊名);
如果py文件直接運(yùn)行時,那么name默認(rèn)等于字符串”main”;
廢話多

二.作用
1.name == “main” 作為啟動py文件的main函數(shù)入口
2.一個項(xiàng)目中必然會包含多個模塊文件,每個模塊文件在自己寫完代碼之后會做一些簡單的測試用于檢測bug 或者 對自己的函數(shù)調(diào)用寫一個簡單的示例,而恰到好處的是:name == “main” 既不會影響你的測試代碼,也不會影響別人調(diào)用你的接口函數(shù)。