美文网首页
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