当前位置: 移动技术网 > IT编程>脚本编程>Python > python的类方法与静态方法细节讲解,中文理解与例子

python的类方法与静态方法细节讲解,中文理解与例子

2020年07月16日  | 移动技术网IT编程  | 我要评论
classmethod(类函数)与 staticmethod(静态函数)外行人理解为:静态方法是类方法他祖先

classmethod(类函数)与 staticmethod(静态函数)

classmethod和staticmethod的使用情况:

python中的类也是普通对象,如果想在为创建实例就使用这个类:如将类作为参数传递到其他函数中。又希望在实例化之前这个类之前就能提供某些方法。就可以使用classmethod和staticmethod。

classmethod优点

  1. 可以判断自己是通过基类被调用,还是通过子类被调用。
  2. 通过子类调用时,方法返回子类的实例而非基类的实例。
  3. 通过子类调用时,方法可以调用子类的其他classmethod

额外知识
__new__的特殊之处在于他永远是一个实质上的classmethod(准确来说staticmethod,第一个参数需要手工传递cls)

类方法

class Class_func(object):
    num = 100

    def __init__(self, cl):
        print('构造函数执行了吗')
        self.cl = cl

    @classmethod
    def get(cls, da):
        print('传入数据为{}'.format(da))
        print(cls.num, '在静态输出类属性')# 这里说明类方法可以调用类自身的属性
        return '既然是方法当然有返回值啊'
    
print(Class_func.num, '类自身的属性')
print(Class_func.get('1314'), '传入类方法后的属性')
entity_class = Class_func('1315')
print(entity_class.cl,'创建实例后调用实例属性')
print(entity_class.num, '创建实例后,实例调用类属性')
print(entity_class.get('实例传入'), '创建实例后,实例调用类方法') 
#########################
输出结果
    
100 类自身的属性
传入数据为1314
100 输出类属性
既然是方法当然有返回值啊 传入静态方法后的属性
构造函数执行了吗
1315 创建实例后调用实例属性
100 创建实例后,实例调用类属性
传入数据为实例传入
100 输出类属性
既然是方法当然有返回值啊 创建实例后,实例调用静态方法

从结果得结论

1.在类方法中使用类本身,可以先调用类自身的属性

2.使用类本身可以调用类方法,在类方法中也可以调用类自身的属性

3.在 类方法中不能使用实例的属性和方法,但可以使用类自身的的属性

4.实例可以调用类自身的属性

5.实例可以调用静态方法,也可传参给类方法。(这句可能绕口,实例可以调用类方法,类方法不可以调用实例。在数学中的概念———充分条件,不是充分必要)

静态方法

class Static_func(object):
    num = 10

    def __init__(self, st):
        print('构造函数执行了吗')
        self.st = st

    @staticmethod
    def get(da):
        print('传入数据为{}'.format(da))
        return '既然是方法当然有返回值啊'
    
print(Static_func.num,'类自身的属性') 
print(Static_func.get('1212'),'调用类方法')
entity = Static_func('1213')
print(entity.num,'实例调用类属性')
print(entity.st,'实例调用构造的属性')
print(entity.get('1214'),'实例调用静态方法')
##################
输出
10 类自身的属性
传入数据为1212
既然是方法当然有返回值啊 调用类方法
构造函数执行了吗
10 实例调用类属性
1213 实例调用构造的属性
传入数据为1214
既然是方法当然有返回值啊 实例调用静态方法

从结果得结论

1.类自身可调用,类本身的类属性(这点和静态方法一致)

2.使用类自身可直接调用静态方法(注意类方法中是不传self和cls的)

3.既然没有传self和cls那就说明静态方法中 是不可以调用创建类的属性(方法)和实例的属性(方法)的

4.实例可以调用类属性

5.实例调用静态方法

最终结果

静态方法是类方法更 底层的实现,

在静态方法中传入cls(类自身)也就是类方法了

本文地址:https://blog.csdn.net/weixin_43883666/article/details/107363083

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网