关于python类的知识学习笔记
class MyClass(object):
def __init__(self):
print 'this is init'
def func(self):
print 'this is func'
if __name__=='__main__':
myClass=MyClass()
myClass.func()
这边是没有传入参数,首先运行的是初始化的参数
运行结果:
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()
运行结果:
this is init
this is func
xiaoye
这里要注意这里MyClass要传入name这个参数,因为定义 的init这个初始里面就有这个参数 然后再把这个参数name赋值给类里面的self.name 这里也可以命名为其它比如 self.nameOther 这个赋值后下面的类里面的就可以直接用self.name调用
class MyClass():
def func(self,name):
print 'this is func'
print name
if __name__=='__main__':
myClass=MyClass()
myClass.func('xiaoye')
这里要注意的是,参数是在方法那边调用的。这里其实隐藏了默认的init初始化, 但是里面方法的func调用的name属性不能用self.name调用 会提示未定义 因为此时就不是类的,而是这个方法的参数 而在上面的几个里面 就要调用self.name 因为此时是类的
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()
运行结果:
this is init
this is func
XIAOYE
这里说的就是类的继承,UpperMyClass 继承了MyClass的属性和方法 同时可以对方法进行改写这就叫做多态,初始化那个可以省略
upFunc=UperMyClass('xiaoye')
upFunc.func()
print type(upFunc.func)
print dir(upFunc)
print upFunc.__doc__
print upFunc.__init__
print upFunc.__module__
print upFunc.name
运行结果:
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()可以获得一个对象的所有属性和方法 'instance 实例 method 方法 type(upFunc.func)就是实例方法
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)
运行结果:
this is init
this is func
XIAOYE
True
特别的专有方法call()方法,可以直接调用 原先在上面必须要用实例方法调用 upFunc.func() 现在可以实现 内部调用 就不用用 upFunc.func()这样调用 callable 是用判断一个对象是否能被调用 能调用就是对象 不能就是函数
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')
运行结果:
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')
运行结果:
this is func
xiaoye
xiaoyeing
如果是直接用dog(name) 会提示找不到dog 因为此时dog是类的私有方法