类变量和实例变量、静态方法与类方法

1、类变量与实例变量

类变量是一种在定义类的时候定义,

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

class Animal:
    name = "动物"

   类变量和实例变量的区别,就是类变量不需要实例化就你能直接使用,相当于绑定在类上,而不是绑定在实例上,例如:

#!/usr/bin/env python3
# -*- coding: utf-8 _*_

class Animal:
    name = "动物"

print (Animal.name)

   执行结果如下:

动物

    但是类变量在实例中也是可以被调用的。例如:

#!/usr/bin/env python3
# _*_ coding: utf-8 _*_

class Animal:
    name = "动物"

dog = Animal()
cat = Animal()

print (dog.name)
print (cat.name)

Animal.name = "哺乳类动物"

print (dog.name)
print (cat.name)

   执行结果如下:

动物
动物
哺乳类动物
哺乳类动物

   但是要注意,实例不能修改类变量,如果实例对类变量进行修改,Python解释器会新建一个同名的成员变量来代理实例中的类变量。

2、静态方法与类方法

定义静态方法:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

class Animal:
    name = "动物"

    @staticmethod
    def play():
        print ("playing")

dog = Animal
Animal.play()
print ("-" * 10)
dog.play()

   执行结果:

playing
----------
playing
    就如着例子写的,定义静态方法的语法就是在定义函数的上面一行(不能有空行) 添加一句”@staticmethod“。 这是一句装饰语法。静态方法不在有第一个默认参数”self”,所以静态方法本身也不能调用成员变量和成员方法,静态方法不需要实例化之后使用,是和类变量一样直接使用即可,其他的和一般的函数内有任何区别。

2.2 类方法

   类方法,顾名思义就是好该方法绑定在定义的类上面,而不是绑定在实例上。

   定义类方法:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

class Animal:
    name = "动物"

    @classmethod
    def play(cls):
        print (cls.name, "playing")

Animal.play()

   执行结果:

动物 playing

   从这个例子,可以看到,定义类方法和静态方法有点类似,是在定义类方法的前一行(不能有空行) 添加一句装饰语法“@classmethod”。和静态方法不同的是,类方法和成员方法一样都有一个初始的参数,但是这个参数不同于成员方法,成员方法的的第一个参数指向的是实例,而类方法指向则是定义的类本身,所以类方法可以读取和修改类变量。

   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值