美文网首页
关于python类的知识学习笔记

关于python类的知识学习笔记

作者: pixyon | 来源:发表于2019-10-27 22:04 被阅读0次
    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是类的私有方法

    相关文章

      网友评论

          本文标题:关于python类的知识学习笔记

          本文链接:https://www.haomeiwen.com/subject/uwrmvctx.html