class MyClass(object):
def __init__(self):
print 'this is init'
def func(self):
print 'this is func'
if __name__=='__main__':
myClass=MyClass()
myClass.func()
這邊是沒有傳入?yún)?shù),首先運(yùn)行的是初始化的參數(shù)
運(yùn)行結(jié)果:
this is init
this is func
class MyClass(object):
def __init__(self,name):
print 'this is init'
self.name=name
def func(self):
print 'this is func'
print self.name
if __name__=='__main__':
myClass=MyClass('xiaoye')
myClass.func()
運(yùn)行結(jié)果:
this is init
this is func
xiaoye
這里要注意這里MyClass要傳入name這個(gè)參數(shù),因?yàn)槎x 的init這個(gè)初始里面就有這個(gè)參數(shù) 然后再把這個(gè)參數(shù)name賦值給類里面的self.name 這里也可以命名為其它比如 self.nameOther 這個(gè)賦值后下面的類里面的就可以直接用self.name調(diào)用
class MyClass():
def func(self,name):
print 'this is func'
print name
if __name__=='__main__':
myClass=MyClass()
myClass.func('xiaoye')
這里要注意的是,參數(shù)是在方法那邊調(diào)用的。這里其實(shí)隱藏了默認(rèn)的init初始化, 但是里面方法的func調(diào)用的name屬性不能用self.name調(diào)用 會(huì)提示未定義 因?yàn)榇藭r(shí)就不是類的,而是這個(gè)方法的參數(shù) 而在上面的幾個(gè)里面 就要調(diào)用self.name 因?yàn)榇藭r(shí)是類的
class MyClass():
def __init__(self, name):
print 'this is init'
self.name = name
def func(self):
print 'this is func'
print self.name
class UpperMyClass(MyClass):
def __init__(self,name):
MyClass.__init__(self,name)
def func(self):
print 'this is func'
print self.name.upper()
if __name__=='__main__':
#myClass=MyClass('xiaoye')
#myClass.func()
upFunc=UpperMyClass('xiaoye')
upFunc.func()
運(yùn)行結(jié)果:
this is init
this is func
XIAOYE
這里說的就是類的繼承,UpperMyClass 繼承了MyClass的屬性和方法 同時(shí)可以對(duì)方法進(jìn)行改寫這就叫做多態(tài),初始化那個(gè)可以省略
upFunc=UperMyClass('xiaoye')
upFunc.func()
print type(upFunc.func)
print dir(upFunc)
print upFunc.__doc__
print upFunc.__init__
print upFunc.__module__
print upFunc.name
運(yùn)行結(jié)果:
this is init
this is func
XIAOYE
<type 'instancemethod'>
['doc', 'init', 'module', 'func', 'name']
None
<bound method UperMyClass.init of <main.UperMyClass instance at 0x000000000266B188>>
main
xiaoye
dir()可以獲得一個(gè)對(duì)象的所有屬性和方法 'instance 實(shí)例 method 方法 type(upFunc.func)就是實(shí)例方法
class UperMyClass(MyClass):
def __init__(self,name):
MyClass.__init__(self,name)
def func(self):
print 'this is func'
print self.name.upper()
def __call__(self):
self.func()
if __name__=='__main__':
#myClass=MyClass('xiaoye')
#myClass.func()
upFunc=UperMyClass('xiaoye')
#upFunc.func()
upFunc()
print callable(upFunc)
運(yùn)行結(jié)果:
this is init
this is func
XIAOYE
True
特別的專有方法call()方法,可以直接調(diào)用 原先在上面必須要用實(shí)例方法調(diào)用 upFunc.func() 現(xiàn)在可以實(shí)現(xiàn) 內(nèi)部調(diào)用 就不用用 upFunc.func()這樣調(diào)用 callable 是用判斷一個(gè)對(duì)象是否能被調(diào)用 能調(diào)用就是對(duì)象 不能就是函數(shù)
def dog(action):
print action+'ing'
class MyClass():
def func(self,name):
print 'this is func'
print name
dog(name)
if __name__=='__main__':
myClass=MyClass()
myClass.func('xiaoye')
運(yùn)行結(jié)果:
this is func
xiaoye
xiaoyeing
class MyClass():
def dog(self,action):
print action + 'ing'
def func(self,name):
print 'this is func'
print name
self.dog(name)
if __name__=='__main__':
myClass=MyClass()
myClass.func('xiaoye')
運(yùn)行結(jié)果:
this is func
xiaoye
xiaoyeing
如果是直接用dog(name) 會(huì)提示找不到dog 因?yàn)榇藭r(shí)dog是類的私有方法