classmethod如何在python中选择参数?
说起类的调用,就绕不开对于参数的讨论,我们在之前文章中已经讨论过了静态方法对于参数的一些使用。那么,同样是我们所熟知的类方法,对于参数的使用上又有着怎样的区别呢?这里我们先在代码中调用classmethod,在运行的过程中想必就知道需要用到什么参数了。其他的不多说,下面是调用classmethod代码,大家找找参数吧。
class Data_test2(object): day=0 month=0 year=0 def __init__(self,year=0,month=0,day=0): self.day=day self.month=month self.year=year @classmethod def get_date(cls, string_date): #这里第一个参数是cls, 表示调用当前的类名 year,month,day=map(int,string_date.split('-')) date1=cls(year,month,day) #返回的是一个初始化后的类 return date1 def out_date(self): print "year :" print self.year print "month :" print self.month print "day :" print self.day
在Date_test类里面创建一个成员函数, 前面用了@classmethod装饰。 它的作用就是有点像静态类,比静态类不一样的就是它可以传进来一个当前类作为第一个参数。那么如何调用呢?
r=Data_test2.get_date("2016-8-1") r.out_date()
输出:
year : 2016 month : 8 day : 1
这样子等于先调用get_date()对字符串进行处理,然后才使用Data_test的构造函数初始化。
补充classmethod与staticmethod:
这两者的区别在于,classmethod增加了一个对实际调用类的引用,这带来了很多方便的地方:
方法可以判断出自己是通过基类被调用,还是通过某个子类被调用
通过子类调用时,方法可以返回子类的实例而非基类的实例
通过子类调用时,方法可以调用子类的其他classmethod
一般来说classmethod可以完全替代staticmethod。staticmethod唯一的好处是调用时它返回的是一个真正的函数,而且每次调用时返回同一个实例(classmethod则会对基类和子类返回不同的bound method实例),但这点几乎从来没有什么时候是有用的。不过,staticmethod可以在子类上被重写为classmethod,反之亦然,因此也没有必要提前将staticmethod全部改为classmethod,按需要使用即可。
以上就是classmethod在python中选择参数的一些分析,同时结合我们之前所学的staticmethod,也可以进行一个参数选择的简单对比,有兴趣的小伙伴可以查看下。
化拓教育网还为您提供以下相关内容希望对您有帮助:
python 中的 类方法 @ classmathod 怎么用 请举一个最简单的例子?
classmethod 修饰符对应的函数不需要实例化,不需要 self 参数,但第一个参数需要是表示自身类的 cls 参数,可以来调用类的属性,类的方法,实例化对象等。例:!/usr/bin/python -*- coding: UTF-8 -*- class A(object):bar = 1 def func1(self):print ('foo')classmethod def func2(cls)...
Python @classmethod和@staticmethod解释
您可能在上面的部分中注意到@classmethod方法具有一个发送给其方法的cls参数,而@staticmethod方法则没有。这个cls参数是我们讨论过的类对象,它允许@classmethod方法轻松地实例化该类,而不管正在进行任何继承。@staticmethod方法中缺少此cls参数,使它们成为传统意义上的真正的静态方法。它们的主要目的是包含与...
...类方法(@classmethod)和实例方法(self)的使用与区别
3. 类方法(@classmethod)介于静态方法和实例方法之间,它们不需要实例化对象也能被调用,且第一个参数通常是cls,代表类本身。在处理像日期格式转换这样的操作时,类方法可以在实例化之前进行预处理,如`DateTest.get_data("2016-8-1")`,既处理了字符串,也完成了实例化。总的来说,选择哪种方法取...
Python 中的 classmethod 和 staticmethod 有什么具体用途
静态方法sm()被调用 classmethod与@staticmethod的应用实例 !/usr/bin/env python -*- coding: utf-8 -*- class TClassStatic(object):obj_num = 0 def __init__(self, data):self.data = data TClassStatic.obj_num += 1 def printself(self):print("self.data: ", self.data)staticm...
python 类中的变量传递给类中的函数
① 第一个格式 @classmethod 的中文意思就是“类方法”,@classmethod声明了函数1是类方法,这样才能允许函数1使用类属性中的数据。 ② 第二个格式 cls 的意思是class的缩写。如果类方法函数1想使用类属性(也就是类中的变量),就要写上cls为函数1的第一个参数,也就是把这个类作为参数传给...
Python 中的 classmethod 和 staticmethod 有什么具体用途
类和实例都是对象.所以它们可以有方法.类的方法就叫类方法.实例的方法就叫实例方法.至于静态方法就是写在类里的方法,必须用类来调用(极少数情况下使用,一般都在全局里直接写函数了)
[2]Python面向对象-【3】方法
在Python中,方法是与对象相关联的函数,定义在类中。它可以访问对象的属性,并通过修改属性改变对象状态。方法第一参数`self`表示对象自身。实例方法与对象关联,可通过对象属性与方法调用。如`class Person: def say_hello(self): print("Hello!")`,创建`Person`对象,并访问`say_hello`方法。类...
python类中怎么定义方法
对于Python类中,方法的定义方式,我们可以归纳有4种类型:推荐学习:Python视频教程)1、不带self、cls参数且不加装饰器(staticmethod、classmethod)定义代码如下:class Student(object): def func(name): print('my name is {}'.format(name))2、正常的方法定义,带self参数定义代码如下:class ...
python类方法问题
classmethoddef new_square(cls, side_length): return cls(side_length, side_length)@classmethod表示函数new_square是Rectangle类里面创建一个成员函数cls表示调用当前的类名side_length是函数的一个要传的参数return cls(side_length, side_length)表示返回调用Rectangle类的构造函数def __init__(sel...
Python 中的 classmethod 和 staticmethod 有什么具体用途
classmethod def get_no_of_instance(cls_obj):return cls_obj.no_inst ik1 = Kls()ik2 = Kls()print ik1.get_no_of_instance()print Kls.get_no_of_instance()输出:2 2 这样的好处是: 不管这个方式是从实例调用还是从类调用,它都用第一个参数把类传递过来.staticmethod 经常有一些跟类...