classmethod与staticmethod

Posted Ryansuperwa

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了classmethod与staticmethod相关的知识,希望对你有一定的参考价值。

1、绑定方法:

  在类内部定义的函数,默认就是给对象来用,而且是绑定给对象用的,称为对象的绑定方法

  绑定对象的方法特殊之处:

  绑定到类的方法特殊之处:

    应该由类来调用,类来调用,会自动将类当作第一个参数传入

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)
p=people(egon,19)
p.tell()
p1=People(settings.NAME,settings.AGE)
p1.tell()

p2=People(settings.Name,settings.AGE)


p3=People(alex,74)
p3.tell()

print(People.from_conf)
p4=People.from_conf(People)
print(People.from_conf)
p4=People.from_conf()
p4.tell()

2、staticmethod:非绑定方法,就是一个普通函数

特性:即不跟类的绑定,不跟对象绑定,这意味着谁都能用、谁来用都是一个普通函数,也就是

说自动化的值的特性了

import setting
import hash lib
import time
class People:
    def __init__(self, name,age)
        self.uid=self.create_id()
        self.name=name
        self.age=age
    def tell(self):
        print(%s:%s:%s%(self.uid,self.name,self.age))
    @classmethod #绑定关系    
    def from_conf(cls):
        return cls(setting, name,setting.age)
    @staticmethod #解除绑定关系
    def create_id():
        m=hashlib.md5()
        m.update(str(time.clock).encode(utf-8))    
        return m.hexdigest()
obj=People(egon,18)
print(obj.uid,obj.name,obj.age)
obj.tell()

print(obj.create_id)#运行的结果是一个函数的内存地址
print(People.create_id)
print(obj.create_id())#运行的结果
print(obj.create_id())

 

以上是关于classmethod与staticmethod的主要内容,如果未能解决你的问题,请参考以下文章

Python中的classmethod与staticmethod

classmethode,staticmethode反射

@staticmethod和@classmethod的作用与区别

测开之路十六:@classmethod与@staticmethod

python中 staticmethod与classmethod

classmethod与staticmethod