python tutorial_Python Tutorial笔记
一、類(lèi)(PT第九章)
9.3.4 方法對(duì)象
class MyClass:
"""A simple example class"""
i = 12345
def f(self):
return 'hello world'
xf = x.f
while True:
print xf()
方法的特別之處在于實(shí)例對(duì)象被作為函數(shù)的第一個(gè)參數(shù)傳給了函數(shù)。在我們的示例中,調(diào)用x.f()完全等同于MyClass.f(x)。一般情況下,以n
個(gè)參數(shù)的列表調(diào)用一個(gè)方法就相當(dāng)于將方法所屬的對(duì)象插入到列表的第一個(gè)參數(shù)的前面,然后以新的列表調(diào)用相應(yīng)的函數(shù)。如果你還是不明白方法的工作原理,了解一下它的實(shí)現(xiàn)或許有幫助。引用非數(shù)據(jù)屬性的實(shí)例屬性時(shí),會(huì)搜索它的類(lèi)。如果這個(gè)命名確認(rèn)為一個(gè)有效的類(lèi)屬性即函數(shù)對(duì)象,就會(huì)將實(shí)例對(duì)象和函數(shù)對(duì)象封裝進(jìn)一個(gè)抽象對(duì)象:這就是方法對(duì)象。以一個(gè)參數(shù)列表調(diào)用方法對(duì)象時(shí),它被重新拆封,用實(shí)例對(duì)象和原始的參數(shù)列表構(gòu)造一個(gè)新的參數(shù)列表,然后以這個(gè)新的參數(shù)列表調(diào)用對(duì)應(yīng)的函數(shù)對(duì)象。
9.3.5 類(lèi)和實(shí)例變量
一般來(lái)說(shuō),實(shí)例變量用于對(duì)每一個(gè)實(shí)例都是唯一的數(shù)據(jù),類(lèi)變量用于類(lèi)的所有實(shí)例共享的屬性和方法:
class MyClass:
"""A simple example class"""
i = 12345
def f(self):
return 'hello world'
a=MyClass()
b=MyClass()
print a.i is b.i
print a.i is MyClass.i
a.i=5
print a.i is b.i
print a.i is MyClass.i
重要的警告:默認(rèn)值只計(jì)算一次。這使得默認(rèn)值是可變的對(duì)象如列表、字典或大部分類(lèi)的實(shí)例時(shí)會(huì)有所不同
class MyClass:
"""A simple example class"""
i = 12345
def f(self):
return 'hello world'
def t(self,L=[]):
L.append('a')
return L
a=MyClass()
b=MyClass()
print a.t()
print b.t()
9.4 補(bǔ)充說(shuō)明
通常,方法的第一個(gè)參數(shù)稱(chēng)為self。這僅僅是一個(gè)約定:名字self對(duì) Python 而言絕對(duì)沒(méi)有任何特殊含義。但是請(qǐng)注意:如果不遵循這個(gè)約定,對(duì)其他的 Python 程序員而言你的代碼可讀性就會(huì)變差,而且有些類(lèi) 查看 器程序也可能是遵循此約定編寫(xiě)的。
問(wèn)題:為啥p方法訪問(wèn)不到o,但如果在__init__函數(shù)里定義了o就可以訪問(wèn)呢
class MyClass:
"""A simple example class"""
i = 12345
def f(self):
self.o=123
return 'hello world'
def t(self,L=[]):
L.append('a')
return L
def p(self):
print self.o
a=MyClass()
a.p()
9.8 異常也是類(lèi)
class B:
pass
class C(B):
pass
class D(C):
pass
for c in [B, C, D]:
try:
raise c()
except D:
print "D"
except C:
print "C"
except B:
print "B"
9.9 迭代器
class Reverse:
"""Iterator for looping over a sequence backwards."""
def __init__(self, data):
self.data = data
self.len=len(data)
self.index=-1
def __iter__(self):
return self
def next(self):
if self.index == self.len-1:
self.index=-1
raise StopIteration
self.index = self.index + 1
return self.data[self.index]
r=Reverse('abc')
for x in r:
print x
print r.index
二、標(biāo)準(zhǔn)庫(kù)概覽(PT第十、十一章)
導(dǎo)入模塊語(yǔ)句
模塊即為一個(gè)py文件,模塊名就是py文件名去掉.py,import后面接的就是模塊名,不同的模塊可以放在不同的包(就是文件夾啦,from后面接的那個(gè)就是包名)里,導(dǎo)入方法有兩種,比如包名叫做package,模塊名叫module,這個(gè)模塊里有個(gè)方法叫做function(),有個(gè)類(lèi)叫Class
方式1:
import package.module
#調(diào)用方法的方式為
package.module.function()
import package.module
#調(diào)用方法的方式為
package.module.Class()
方式2:
from package import module
#調(diào)用方法的方式為
module.function()
而且,import后面可以接模塊內(nèi)的方法名,from后面接模塊名,比如:
from package.module import function
#可以直接調(diào)用
function()
from package.module import Class
#可以直接調(diào)用
Class()
然而并不存在import package.module.function的用法
總結(jié)
以上是生活随笔為你收集整理的python tutorial_Python Tutorial笔记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: vue 父组建获取子组建方法为获得_Vu
- 下一篇: python网址在浏览器能打开_Pyth