python中staticmethod classmethod及普通函数的区别

staticmethod 基本上和一个全局函数差不多,只不过可以通过类或类的实例对象

(python里光说对象总是容易产生混淆, 因为什么都是对象,包括类,而实际上

类实例对象才是对应静态语言中所谓对象的东西)来调用而已, 不会隐式地传入

任何参数。这个和静态语言中的静态方法比较像。

classmethod 是和一个class相关的方法,可以通过类或类实例调用,

并将该class对象(不是class的实例对象)隐式地 当作第一个参数传入。

就这种方法可能会比较奇怪一点,不过只要你搞清楚了python里class也是个真实地

存在于内存中的对象,而不是静态语言中只存在于编译期间的类型。

正常的方法 就是和一个类的实例对象相关的方法,通过类实例对象进行调用,

并将该实例对象隐式地作为第一个参数传入,这个也和其它语言比较像。

可如下示例:

 1 #!/usr/bin/python
 2 2.#coding:utf-8
 3 3.
 4 4.#author:    gavingeng
 5 5.#date:      2011-12-03 10:50:01
 6 6.
 7 7.class Person:
 8 8.
 9 9.    def __init__(self):
10 10.        print "init"
11 11.
12 12.    @staticmethod
13 13.    def sayHello(hello):
14 14.        if not hello:
15 15.            hello=‘hello‘
16 16.        print "i will sya %s" %hello
17 17.
18 18.
19 19.    @classmethod
20 20.    def introduce(clazz,hello):
21 21.        clazz.sayHello(hello)
22 22.        print "from introduce method"
23 23.
24 24.    def hello(self,hello):
25 25.        self.sayHello(hello)
26 26.        print "from hello method"
27 27.
28 28.
29 29.def main():
30 30.    Person.sayHello("haha")
31 31.    Person.introduce("hello world!")
32 32.    #Person.hello("self.hello") #TypeError: unbound method hello() must be called with Person instance as first argument (got str instance instead)
33 33.
34 34.    print "*" * 20
35 35.    p = Person()
36 36.    p.sayHello("haha")
37 37.    p.introduce("hello world!")
38 38.    p.hello("self.hello")
39 39.
40 40.if __name__==‘__main__‘:
41 41.    main()  

output:

 1 i will sya haha
 2 2.i will sya hello world!
 3 3.from introduce method
 4 4.********************
 5 5.init
 6 6.i will sya haha
 7 7.i will sya hello world!
 8 8.from introduce method
 9 9.i will sya self.hello
10 10.from hello method  
时间: 2024-10-05 18:44:50

python中staticmethod classmethod及普通函数的区别的相关文章

python中的str和repr函数的区别

看了一些网上的解释,最主流的解释是“str是给人看的,repr是给机器看的”,如果已经理解了的,这句话是对的,但是是有问题的,对于没懂的,这句话是无法理解的. 我来尝试解释一下.先直译一下官方文档: repr(object) Return a string containing a printable representation of an object. For many types, this function makes an attempt to return a string tha

python中os路径相关的函数 os.mkdir和os.makedirs

传送门:http://blog.csdn.net/shennongzhaizhu/article/details/51455063 在Python中可以使用os.mkdir()函数创建目录(创建一级目录). os.mkdir(path) 例如要在D盘下创建hello的目录 >>> import os >>> os.mkdir('d:\hello') 其原型如下所示: 其参数path 为要创建目录的路径(创建多级目录) >>> import os >

Python中转变大小写的直接函数有以下方法

Python中转变大小写的直接函数有以下方法: upper()--所有字母大写 lower()--所有字母小写 capitalize()--首字母大写,其他字母小写 title()--所有单词首字母大写,其他小写 下面来看一个例子, 把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字.如输入:['adam', 'LISA', 'barT'],输出:['Adam', 'Lisa', 'Bart'] 1. 如果想要用title()函数,必须把列表写为字符串的形式,如下 2. 还可以用m

python中列表(list)函数及使用

序列是Python中最基本的数据结构.序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推. Python有6个序列的内置类型,但最常见的是列表和元组. 序列都可以进行的操作包括索引,切片,加,乘,检查成员. 此外,Python已经内置确定序列的长度以及确定最大和最小的元素的方法. 列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现. 列表的数据项不需要具有相同的类型 创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可

python中_、__和__xx__的区别

python中_.__和__xx__的区别 本文为译文,版权属于原作者,在此翻译为中文分享给大家. 英文原文地址:Difference between _, __ and __xx__ in Python 在学习Python时,很多人都弄不清楚各种下划线的意思,而且在这之前已经给其他人解释过很多遍了,是时候把它记录下来. "_"单下划线 Python中不存在真正的私有方法.为了实现类似于c++中私有方法,可以在类的方法或属性前加一个“_”单下划线,意味着该方法或属性不应该去调用,它并不

python 类中staticmethod,classmethod,普通方法

1.staticmethod:静态方法和全局函数类似,但是通过类和对象调用. 2.classmethod:类方法和类相关的方法,第一个参数是class对象(不是实例对象).在python中class也是一个真实存在于内存中的对象,不同于其他语言只存在于编译期间. 3.普通方法和实例相关的方法,通过类实例调用. 4.代码示例 #coding:utf-8 ''' Created on 2015年5月29日 @author: canx ''' class Person: def __init__(se

python中 staticmethod与classmethod

原文地址https://blog.csdn.net/youngbit007/article/details/68957848 原文地址https://blog.csdn.net/weixin_35653315/article/details/78165645 原文地址https://www.cnblogs.com/1204guo/p/7832167.html 在Python里, 在class里定义的方法可以大致分为三类: 实例方法, 类方法与静态方法. 用一个表格总结如下: 方法类型 修饰 调用

python中@staticmethod、@classmethod和实例方法

1.形式上的异同点: 在形式上,Python中:实例方法必须有self,类方法用@classmethod装饰必须有cls,静态方法用@staticmethod装饰不必加cls或self,如下代码所示: 1 class A(object): 2 def __init__(self, name): 3 self.name = name 4 5 def get_a_object(self): 6 return "get object method:{}".format(self.name)

Python @staticmethod, @classmethod, @property

@staticmethod, @classmethod, @property 用法及作用 class Foo(object) : def __init__(self) : self._name = "property test" print "init" def test(self) : print "class method" @property def name(self) : return self._name @staticmethod