staticmethod classmethod修饰符

一、staticmethod(function)

Return a static method for function.
A static method does not receive an implicit first argument. To declare a static method, use this idiom:

class Sing():
    @staticmethod
    def sayHello():
        print "hello world"

    def sayNo():
        print "no"

if __name__ == ‘__main__‘:
    Sing.sayHello()
    Sing.sayNo()

Sing.sayNo报错如下:

TypeError: unbound method sayNo() must be called with Sing instance as first argument (got nothing instead)
sayNo()方法非静态方法,需要先将对象Sing实例化才能调用该方法
而sayHello()方法不报错,因为staticmethod修饰
下面方法才是对的:

class Sing():
    @staticmethod
    def sayHello():
        print "hello world"

    def sayNo(self):
        print "no"

if __name__ == ‘__main__‘:
    Sing.sayHello()
    sing = Sing()
    sing.sayNo()

二、classmethod(function)

Return a class method for function.
A class method receives the class as implicit first argument, just like an instance method receives the instance. To declare a class method, use this idiom:

class Sing():
    @classmethod
    def sayHello(self):
        print "hello world"

    def sayNo(self):
        print "no"

if __name__ == ‘__main__‘:
    Sing.sayHello()
    sing = Sing()
    sing.sayNo()
    

注意:staticmethod修饰的方法不需要接self参数,而classmethod修饰的方法则需要接self参数;

三、@property修饰符(新式类特有,新式类即接object定义的类)
修饰为类的属性,如下为不加@property修饰符的类的定义:

class C(object):
    def __init__(self):
        self._x = None

    def getx(self):
        return self._x
    def setx(self, value):
        self._x = value
    def delx(self):
        del self._x
    x = property(getx, setx, delx, "I‘m the ‘x‘ property.")

通过@property修饰符修饰的类的定义:(从Python2.6开始引入setter,deleter,getter属性)

class C(object):
    def __init__(self): self._x = None

    @property
    def x(self):
        """I‘m the ‘x‘ property."""
        return self._x

    @x.setter
    def x(self, value):
        self._x = value

    @x.deleter
    def x(self):
        del self._x
时间: 2024-10-01 12:38:23

staticmethod classmethod修饰符的相关文章

Python classmethod 修饰符

classmethod 修饰符对应的函数不需要实例化,不需要 self 参数,但第一个参数需要是表示自身类的 cls 参数,可以来调用类的属性,类的方法,实例化对象等.返回类方法. 实例: 1 #!/usr/bin/python 2 # -*- coding: UTF-8 -*- 3 4 class A(object): 5 bar = 1 6 def func1(self): 7 print 'foo' 8 @classmethod 9 def func2(cls): 10 print 'fu

(转)Python记录@classmethod 修饰符

通常情况下,如果我们要使用一个类的方法,那我们只能将一个类实体化成一个对象,进而调用对象使用方法. 比如: class Hello(object):     def __init__:         ...     def print_hello(self):         print "Hello" 要用 print_hello() 就得: hlo = Hello() hlo.print_hello() Hello 如果用了 @classmethod 就简单了. class He

staticmethod classmethod property方法

@staticmethod 静态方法 函数修饰符,用来修饰一个函数,类似于装饰器 class Dog(object): def __init__(self,name): self.name = name def eat(self,food): print('%s is eating %s'%(self.name,food)) d = Dog('二哈') d.eat('包子') #二哈 is eating 包子 eat()方法上面加上 @staticmethod class Dog(object)

python中的 @ 修饰符

今天学习廖老师的python教程,碰到了修饰符'@',不太了解,查看了下官方文档. 简单的整理下: @dec2 @dec1 def func(arg1, arg2, ...): pass 等价于 def func(arg1, arg2, ...): pass func = dec2(dec1(func)) 使用示例: 在comp.lang.python 和 python-dev的大部分讨论集中在更简捷地使用内置修饰符staticmethod() 和 classmethod() 上.但修饰符的功能

python学习笔记-Day8 上(pickle补充、字段、面向对象成员、成员修饰符、特殊方法)

pickle 序列化补充 # pickle load # 现在有两个python程序,调用关系如下 # s1.py class foo: …. Obj = foo(x,y) Pickle.dump(obj, open(‘db’,’wb’)) S2.py # s2.py from s1 import foo pickle.load(db) # s2.py 反序列化加载包含对象,一定要先导入对象对应的类,否则Pickle load将会报错 类多继承关系 有共同父类的继承关系如下 如图,如果我们有两个

文成小盆友python-num8 面向对象中的成员,成员修饰符,特殊成员,异常处理,设计模式之单例模式

本节主要内容: 1.面向对象中的成员 2.成员修饰符 3.特殊成员 4.异常处理 5.设计模式之单例模式 一.面向对象中的成员(类的成员) 类的成员总共可以分为3大类,每类中有不同的分支. 1.总述,基本分类 如下图所示: 类成员包括字段,方法,和属性 2.字段 如上图字段分为普通字段和静态字段,两者的使用有区别,但是最大的区别在于两者在内存中的保存位置有区别. 普通字段属于对象而静态字段属于类,在使用过程中谁的字段就由谁来调用. 静态字段和普通字段的定义如下: 在调用时分各自调用 #####类

Python_day8_面向对象(多态、成员修饰符、类中特殊方法、对象边缘知识)、异常处理之篇

一.面向对象之多态 1.多态:简而言子就是多种形态或多种类型 python中不支持多态也用不到多态,多态的概念是应用与java/C#中指定传参的数据类型, java多态传参:必须是传参数的数据类型或传参的子类类型 面向对象总结: 面向对象是一种编程方式,此编程方式的实现是基于类和对象的使用 类:是一个模板,模板中包含了多个函数共使用,即类中可包含多个函数(类中的函数即叫做方法) 一般疑问: 1)什么样的代码才是面向对象? 简单来说,如果程序中的所有功能否是由 “类”和“对象”实现,那么就是面向对

面向对象修饰符

一.成员: 字段  静态字段(每个对象都有一份).普通字段(每个对象都不同的数据) 方法   静态方法(无需使用对象封装的内容).类方法.普通方法(使用对象中的数据) 特性   普通特性  (将方法伪造成字段) 二.快速判断:类执行还是对象执行 self ,对象调用 无self,类调用 三 .成员修饰符 成员修饰符 私有属性:只能通过自己调用,其他的都不能被调用 但是私有属性和私有方法属性可以被其他函数间接的调用 python里面也有特殊的:直接访问私有属性(对象._类名__属性名字)不建议使用

java修饰符public final static abstract transient

JAVA 修饰符public final static abstract transient 关键字: public final static abstract ... 1.public protected default private 组 位置                        private      默认      protected        public 同一个类                    是            是         是