(python)classmethod与staticmetod

3人阅读 评论(0) 收藏 举报
绑定方法有两种:
    一种是定义在类里给对象的绑定方法,另外一种是绑定给类使用。
我们来看一下用classmethod,如何将方法绑定给类使用的。
#在setting文件中用来个属性我们来调用它
NAME='monicx'
AGE=23
#===========end==================

import setting
class People:
    def __init__(self,name,age):
        self.name=name
        self.age=age

    def tell(self):
        print('%s,%s'%(self.name,self.age))

    @classmethod
    def from_conf(cls):
        return cls(setting.NAME,setting.AGE)


p1=People.from_conf()
p1.tell()

用@classmethod装饰过的方法谅是绑定给类的方法,有个细节,此时方法里面默认的第一参数名不再为self而是变为cls。


staticmethod

那么有人会想,有没有一种方法,在类里面定义,即可以给类用,又可以给对象使用的呢!!!

有,它就是非绑定方法,也称为静态方法。在类里定义的方法前加上@staticmethod装饰器即可。

解决一个对象和类都能获取一个id的问题:

import hashlib
import time

class People:
    def __init__(self,name,age):
        self.name=name
        self.age=age

    def tell(self):
        print('%s,%s'%(self.name,self.age))

    @staticmethod
    def create_id():
        m = hashlib.md5()
        m.update(str(time.clock()).encode('utf-8'))
        return m.hexdigest()

obj=People('xxx','22')
print(obj.create_id())
print(People.create_id())
这样即可让类来获取一个id,也可以通过对象获取一个id

查看评论

python @classmethod 的使用场合

官方的说法:  classmethod(function) 中文说明: classmethod是用来指定一个类的方法为类方法,没有此参数指定的类的方法为实例方法,使用方法如下:   class C: ...
  • dyh4201
  • dyh4201
  • 2017-10-25 01:04:30
  • 272

飘逸的python - @staticmethod和@classmethod的作用与区别

一般来说,要使用某个类的方法,需要先实例化一个对象再调用方法,而使用@staticmethod或@classmethod,就可以不需要实例化,直接类名.方法名()来调用。 这有利于组织代码,把某些应该...
  • u010180339
  • u010180339
  • 2013-07-29 13:29:41
  • 60150

理解python:@classmethod 和@staticmethod

具体详情,请看参考链接!用途: 写与类进行交互的方法,而不是实例。 @classmethod: 使用地方: 和类进行交互,但不和其实例进行交互的函数方法 举个列子:在类外定义一个函数,来...
  • reallocing1
  • reallocing1
  • 2016-11-29 18:42:57
  • 2265

python 装饰器@staticmethod和@classmethod区别和使用

python 装饰器@staticmethod和@classmethod区别和使用
  • u010571844
  • u010571844
  • 2016-02-24 11:17:20
  • 1910

python中 classmethod、staticmethod和普通方法的区别

python中 classmethod、staticmethod和普通方法的区别这三种方法在类和实例中都存在,都可被调用,但调用的时候默认默认传递的参数不同。对于classmethod方法当实例调用c...
  • u010157603
  • u010157603
  • 2016-03-28 16:41:57
  • 1718

Python中的@classmethod用法

在Python面向对象编程中的类构建中,有时候会遇到@classmethod的用法。总感觉有这种特殊性说明的用法都是高级用法,在我这个层级的水平中一般是用不到的。不过还是好奇去查了一下。      ...
  • grey_csdn
  • grey_csdn
  • 2017-08-19 11:53:58
  • 1085

python classmethod类方法

python classmethod类方法的要点主要有3个: 1 在python中.类方法 @classmethod 是一个函数修饰符,它表示接下来的是一个类方法,而对于平常我们见到的则叫做实例方法...
  • maoyongfan3
  • maoyongfan3
  • 2015-04-29 15:09:09
  • 1362

【Python笔记】装饰器语法糖(@staticmethod/@classmethod/@property)原理剖析及使用场景说明

在阅读一些开源Python库的源码时,经常会看到在某个类的成员函数前,有类似于@staticmethod或@classmethod或@property的语法糖。本质上,它们都是函数装饰器,只不过通常被...
  • slvher
  • slvher
  • 2015-01-07 19:31:14
  • 4466

python中classmethod与staticmethod的差异及应用

类中三种函数的应用#!/usr/bin/env python # -*- coding: utf-8 -*-class TClassStatic(object): def __init__(s...
  • callinglove
  • callinglove
  • 2015-05-13 10:05:55
  • 4107

python classmethod,staticmethod实现

classmethod class my_classmethod(object): def __get__(self, obj, type=None): def wrapper...
  • u010066807
  • u010066807
  • 2016-05-10 21:58:36
  • 839
    个人资料
    等级:
    访问量: 88
    积分: 131
    排名: 116万+
    文章分类
    文章存档
    最新评论