美文网首页
python 类的方法和变量

python 类的方法和变量

作者: andrew_su_cd | 来源:发表于2018-11-13 16:43 被阅读0次

    一、实例方法,静态方法,类方法,是不是有点让人挠头,怎么选择?
    直接上代码

    class Example:
        name='sky is blue'
        
        def __init__(self,title):
            self.title = title
    
        def instance_method(self):
            print('i am a {} method'.format('instance'))
    
        @staticmethod
        def static_method():
            print('i am a {} method'.format('static'))
    
        @classmethod
        def class_method(cls):
            print('i am a {} method'.format('class'))
    
        def method(self):
            print('i am a {} method'.format('instance'))
    
        @staticmethod
        def method():
            print('i am a {} method'.format('static'))
    
        @classmethod
        def method(cls):
            print('i am a {} method'.format('class'))
    

    测试如下:

    example=Example()
    
    # 实例可以调用所有所有种类的方法
    example.instance_method()
    example.static_method()
    example.class_method()
    
    # 类可以调用static和class方法
    Example.static_method()
    Example.class_method()
    
    # 类调用实例方法的时候,需要将实例作为参数
    Example.instance_method(example) #这里的example相当于self
    

    说明:

    • 实例可以调用三种方法
    • 类可以调用静态方法和类方法
    • 静态方法和类方法的不同在于:静态方法通过经过子类继承父类操作后,调用子类的静态方法的时候,实际是调用父类的静态方法;而类方法中,调用子类的类方法就是子类的方法,虽然这个方法继承自父类。当然还有在定义的时候,类方法需要有一个class做参数。
    • 不同种类的方法在定义的时候,可以重名。在重名的情况下,类方法是具备优先权的。

    二、定义类过程中的变量的处理

    class Example:
        name='sky is blue'
        
        def __init__(self,title):
            self.title = title
        
        # 静态方法调用类变量
        @staticmethod
        def static_method():
            print('i am a {} var'.format(Example.name))
        
        # 类方法调用类变量
        @classmethod
        def class_method(klass):
            print('i am a {} var'.format(Example.name))
            print('i am a {} var'.format(klass.name))
        
        def set_class_val(self,val):
            Example.name=val
    
    class ExampleChild(Example):
      pass
    
    class ExampleChild1(Example):
      pass
    
    example =  Example('hello world')
    
    # 类变量可以在实例和类中都可以被调用
    print(example.name)
    print(Example.name)
    
    example_child = ExampleChild('hello child\'s world')
    example_child.set_class_val('sky is red')
    
    example_child1= ExampleChild1('hello child1\'s world')
    # 见证奇迹的时候到了
    print(Example.name)
    print(example.name)
    print(ExampleChild.name)
    print(example_child.name)
    print(example_child1.name)
    # 结果都是sky is red
    

    说明:

    • 类变量太容易被修改了,即使子类调用了一个实例方法,都可以将父类的变量修改掉。同时其他子类的使用类变量的时候,也是一个变化后的变量。
    • 基于上面的认知,类变量的使用应该是极其谨慎才好。

    相关文章

      网友评论

          本文标题:python 类的方法和变量

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