关于python类的知识学习笔记

2019-10-27  本文已影响0人  pixyon
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是类的私有方法

上一篇下一篇

猜你喜欢

热点阅读