Python论坛  - 讨论区

标题:[python-chinese] classmethod,staticmethod,还有类里面一般的的method有什么区别

2006年12月05日 星期二 16:00

leopay leopay在gmail.com
星期二 十二月 5 16:00:35 HKT 2006

classmethod,staticmethod,还有类里面一般的的method有什么区别?

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年12月05日 星期二 16:06

limodou limodou在gmail.com
星期二 十二月 5 16:06:50 HKT 2006

On 12/5/06, leopay <leopay在gmail.com> wrote:
> classmethod,staticmethod,还有类里面一般的的method有什么区别?

定义方式,传入的参数,调用方式都不相同。

staticmethod 不需要传入self和cls对象,只有一般的参数。可以通过实例或类对象进行调用。
classmethod需要传入cls对象,可以通过实例和类对象进行高用。
一般的method需要传入self实例对象。

-- 
I like python!
UliPad <>: http://wiki.woodpecker.org.cn/moin/UliPad
My Blog: http://www.donews.net/limodou

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年12月05日 星期二 16:12

leopay leopay在gmail.com
星期二 十二月 5 16:12:29 HKT 2006

limodou 写道:
> On 12/5/06, leopay <leopay在gmail.com> wrote:
>   
>> classmethod,staticmethod,还有类里面一般的的method有什么区别?
>>     
>
> 定义方式,传入的参数,调用方式都不相同。
>
> staticmethod 不需要传入self和cls对象,只有一般的参数。可以通过实例或类对象进行调用。
> classmethod需要传入cls对象,可以通过实例和类对象进行高用。
> 一般的method需要传入self实例对象。
>
>   
他们具体作用有什么区别呢?

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年12月05日 星期二 16:13

刘鑫 march.liu在gmail.com
星期二 十二月 5 16:13:19 HKT 2006

http://wiki.woodpecker.org.cn/moin/PyNewStyleClass
ÕâƪÎÄÕ¶ÔÄãÓ¦¸ÃÓаïÖú¡£

2006/12/5, leopay <leopay在gmail.com>:
>
> limodou дµÀ:
> > On 12/5/06, leopay <leopay在gmail.com> wrote:
> >
> >> classmethod£¬staticmethod£¬»¹ÓÐÀàÀïÃæÒ»°ãµÄµÄmethodÓÐʲôÇø±ð£¿
> >>
> >
> > ¶¨Ò巽ʽ£¬´«ÈëµÄ²ÎÊý£¬µ÷Ó÷½Ê½¶¼²»Ïàͬ¡£
> >
> > staticmethod ²»ÐèÒª´«ÈëselfºÍcls¶ÔÏó£¬Ö»ÓÐÒ»°ãµÄ²ÎÊý¡£¿ÉÒÔͨ¹ýʵÀý»òÀà¶ÔÏó½øÐе÷Óá£
> > classmethodÐèÒª´«Èëcls¶ÔÏ󣬿ÉÒÔͨ¹ýʵÀýºÍÀà¶ÔÏó½øÐиßÓá£
> > Ò»°ãµÄmethodÐèÒª´«ÈëselfʵÀý¶ÔÏó¡£
> >
> >
> ËûÃǾßÌå×÷ÓÃÓÐʲôÇø±ðÄØ£¿
> _______________________________________________
> python-chinese
> Post: send python-chinese在lists.python.cn
> Subscribe: send subscribe to python-chinese-request在lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request在lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese




-- 
»¶Ó­·ÃÎÊ£º
http://blog.csdn.net/ccat

ÁõöÎ
March.Liu
-------------- 下一部分 --------------
Ò»¸öHTML¸½¼þ±»ÒƳý...
URL: http://python.cn/pipermail/python-chinese/attachments/20061205/96465ddf/attachment.html 

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年12月05日 星期二 16:48

limodou limodou在gmail.com
星期二 十二月 5 16:48:06 HKT 2006

On 12/5/06, leopay <leopay在gmail.com> wrote:
> limodou 写道:
> > On 12/5/06, leopay <leopay在gmail.com> wrote:
> >
> >> classmethod,staticmethod,还有类里面一般的的method有什么区别?
> >>
> >
> > 定义方式,传入的参数,调用方式都不相同。
> >
> > staticmethod 不需要传入self和cls对象,只有一般的参数。可以通过实例或类对象进行调用。
> > classmethod需要传入cls对象,可以通过实例和类对象进行高用。
> > 一般的method需要传入self实例对象。
> >
> >
> 他们具体作用有什么区别呢?

静态,类方法相关于全局方法。一般与具体的类无关。

-- 
I like python!
UliPad <>: http://wiki.woodpecker.org.cn/moin/UliPad
My Blog: http://www.donews.net/limodou

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年12月05日 星期二 17:05

leopay leopay在gmail.com
星期二 十二月 5 17:05:04 HKT 2006

limodou 写道:
> On 12/5/06, leopay <leopay在gmail.com> wrote:
>   
>> limodou 写道:
>>     
>>> On 12/5/06, leopay <leopay在gmail.com> wrote:
>>>
>>>       
>>>> classmethod,staticmethod,还有类里面一般的的method有什么区别?
>>>>
>>>>         
>>> 定义方式,传入的参数,调用方式都不相同。
>>>
>>> staticmethod 不需要传入self和cls对象,只有一般的参数。可以通过实例或类对象进行调用。
>>> classmethod需要传入cls对象,可以通过实例和类对象进行高用。
>>> 一般的method需要传入self实例对象。
>>>
>>>
>>>       
>> 他们具体作用有什么区别呢?
>>     
>
> 静态,类方法相关于全局方法。一般与具体的类无关。
>
>   
也就是说静态,类方法一般用在抽象类或父类中。而类的一般方法用在具体的类中

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年12月05日 星期二 17:06

刘鑫 march.liu在gmail.com
星期二 十二月 5 17:06:22 HKT 2006

PythonûÓгéÏóÀàµÄ¸ÅÄ¾²Ì¬·½·¨ÊÇΪÁ˼æÈÝÆäËü±à³ÌÓïÑÔµÄÓ﷨ϰ¹ßÉè¼ÆµÄ£¬±¾Éí²»ÊÇPython±ØÐëµÄ¶«Î÷¡£Àà·½·¨ÊÇÌṩ¸øÀàÐͶÔÏóµ÷Óõģ¬Ö÷ÒªÓÃÓÚmeta
class±à³Ì£¬ÆÕͨµÄʵÀý·½·¨Êǹ©ÊµÀý¶ÔÏóµ÷Óõģ¬Õâ¸öÊÇ»ù±¾µÄOO¹¦ÄÜ¡£

2006/12/5, leopay <leopay在gmail.com>:
>
> limodou дµÀ:
> > On 12/5/06, leopay <leopay在gmail.com> wrote:
> >
> >> limodou дµÀ:
> >>
> >>> On 12/5/06, leopay <leopay在gmail.com> wrote:
> >>>
> >>>
> >>>> classmethod£¬staticmethod£¬»¹ÓÐÀàÀïÃæÒ»°ãµÄµÄmethodÓÐʲôÇø±ð£¿
> >>>>
> >>>>
> >>> ¶¨Ò巽ʽ£¬´«ÈëµÄ²ÎÊý£¬µ÷Ó÷½Ê½¶¼²»Ïàͬ¡£
> >>>
> >>> staticmethod ²»ÐèÒª´«ÈëselfºÍcls¶ÔÏó£¬Ö»ÓÐÒ»°ãµÄ²ÎÊý¡£¿ÉÒÔͨ¹ýʵÀý»òÀà¶ÔÏó½øÐе÷Óá£
> >>> classmethodÐèÒª´«Èëcls¶ÔÏ󣬿ÉÒÔͨ¹ýʵÀýºÍÀà¶ÔÏó½øÐиßÓá£
> >>> Ò»°ãµÄmethodÐèÒª´«ÈëselfʵÀý¶ÔÏó¡£
> >>>
> >>>
> >>>
> >> ËûÃǾßÌå×÷ÓÃÓÐʲôÇø±ðÄØ£¿
> >>
> >
> > ¾²Ì¬£¬Àà·½·¨Ïà¹ØÓÚÈ«¾Ö·½·¨¡£Ò»°ãÓë¾ßÌåµÄÀàÎ޹ء£
> >
> >
> Ò²¾ÍÊÇ˵¾²Ì¬£¬Àà·½·¨Ò»°ãÓÃÔÚ³éÏóÀà»ò¸¸ÀàÖС£¶øÀàµÄÒ»°ã·½·¨ÓÃÔÚ¾ßÌåµÄÀàÖÐ
> _______________________________________________
> python-chinese
> Post: send python-chinese在lists.python.cn
> Subscribe: send subscribe to python-chinese-request在lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request在lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese




-- 
»¶Ó­·ÃÎÊ£º
http://blog.csdn.net/ccat

ÁõöÎ
March.Liu
-------------- 下一部分 --------------
Ò»¸öHTML¸½¼þ±»ÒƳý...
URL: http://python.cn/pipermail/python-chinese/attachments/20061205/e9ac9b84/attachment.htm 

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年12月05日 星期二 17:08

limodou limodou在gmail.com
星期二 十二月 5 17:08:26 HKT 2006

On 12/5/06, leopay <leopay在gmail.com> wrote:
> limodou 写道:
> > On 12/5/06, leopay <leopay在gmail.com> wrote:
> >
> >> limodou 写道:
> >>
> >>> On 12/5/06, leopay <leopay在gmail.com> wrote:
> >>>
> >>>
> >>>> classmethod,staticmethod,还有类里面一般的的method有什么区别?
> >>>>
> >>>>
> >>> 定义方式,传入的参数,调用方式都不相同。
> >>>
> >>> staticmethod 不需要传入self和cls对象,只有一般的参数。可以通过实例或类对象进行调用。
> >>> classmethod需要传入cls对象,可以通过实例和类对象进行高用。
> >>> 一般的method需要传入self实例对象。
> >>>
> >>>
> >>>
> >> 他们具体作用有什么区别呢?
> >>
> >
> > 静态,类方法相关于全局方法。一般与具体的类无关。
> >
> >
> 也就是说静态,类方法一般用在抽象类或父类中。而类的一般方法用在具体的类中

也不是这么说。如果没有所谓的抽象类或父类呢。只能说是它们象是公共函数,但是要么与类有些关系,要么希望写到类中一起处理。但有时的确与实例无关。

-- 
I like python!
UliPad <>: http://wiki.woodpecker.org.cn/moin/UliPad
My Blog: http://www.donews.net/limodou

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年12月05日 星期二 17:12

齐辰雄 qcxhome在gmail.com
星期二 十二月 5 17:12:23 HKT 2006

建议看看权威的C++或者Java的OOP书籍。对于类方法的讲解也是用于在Python,只不过Python的实现方式不同。OOP的概念是不会变的。

On 12/5/06, leopay <leopay at gmail.com> wrote:
> classmethod,staticmethod,还有类里面一般的的method有什么区别?
> _______________________________________________
> python-chinese
> Post: send python-chinese at lists.python.cn
> Subscribe: send subscribe to python-chinese-request at lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese


-- 
GoogleTalk: qcxhome at gmail.com
MSN: qcxhome at hotmail.com
My Space: tkdchen.spaces.live.com
BOINC: boinc.berkeley.edu
中国分布式计算总站: www.equn.com

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年12月05日 星期二 17:47

yi huang yi.codeplayer在gmail.com
星期二 十二月 5 17:47:26 HKT 2006

>
> classmethod,staticmethod,还有类里面一般的的method有什么区别?
>

staticmethod
基本上和一个全局函数差不多,只不过可以通过类或类的实例对象(python里说光说对象总是容易产生混淆,因为什么都是对象,包括类,而实际上类实例对象才是对应静态语言中所谓对象的东西)来调用而已,不会隐式地传入任何参数。这个和静态语言中的静态方法比较像。

classmethod
是和一个class相关的方法,可以通过类或类实例调用,并将该class对象(不是class的实例对象)隐式地当作第一个参数传入。就这种方法可能会比较奇怪一点,不过只要你搞清楚了python里class也是个真实地存在于内存中的对象,而不是静态语言中只存在于编译期间的
类型,就好办了。

正常的方法就是和一个类的实例对象相关的方法,通过类实例对象进行调用,并将该实例对象隐式地作为第一个参数传入,这个也和其它语言比较像。

-- 
http://codeplayer.blogspot.com/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://python.cn/pipermail/python-chinese/attachments/20061205/dba27f81/attachment.html 

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年12月05日 星期二 20:48

boyeestudio boyee118在gmail.com
星期二 十二月 5 20:48:41 HKT 2006

2006/12/5, limodou <limodou在gmail.com>:
>
> On 12/5/06, leopay <leopay在gmail.com> wrote:
> > classmethod£¬staticmethod£¬»¹ÓÐÀàÀïÃæÒ»°ãµÄµÄmethodÓÐʲôÇø±ð£¿
>
> ¶¨Ò巽ʽ£¬´«ÈëµÄ²ÎÊý£¬µ÷Ó÷½Ê½¶¼²»Ïàͬ¡£
>
> staticmethod ²»ÐèÒª´«ÈëselfºÍcls¶ÔÏó£¬Ö»ÓÐÒ»°ãµÄ²ÎÊý¡£¿ÉÒÔͨ¹ýʵÀý»òÀà¶ÔÏó½øÐе÷Óá£
> classmethodÐèÒª´«Èëcls¶ÔÏ󣬿ÉÒÔͨ¹ýʵÀýºÍÀà¶ÔÏó½øÐиßÓá£
> Ò»°ãµÄmethodÐèÒª´«ÈëselfʵÀý¶ÔÏó¡£


²ÎÓëÌÖÂÛһϣº

´ÓѧϰjavaÖÐÀà±È¹ýÀ´£¬
Èç¹ûÔÚÒ»¸öÎļþ·¶Î§ÄÚ(ÎļþÖж¨ÒåÓÐÀ࣬ÀàÖл¹¶¨ÒåÓз½·¨)£º
staticmethodÏ൱ÓÚÔÚÒ»¸ö°ü£¨Îļþ£©±»µ¼Èëʱ£¬Õâ¸ö·½·¨ÔÚÄÚ´æÖоÍÏàÓ¦²úÉúÁË¡£ÎÒÃÇ¿ÉÒÔ¶ÔËü½øÐе÷Óá£

classmethodÏ൱ÓÚÔÚÒ»¸öÀà±»ÉùÃ÷ʱ£¨Ã»Óж¨Ò壬Õâʱ»¹Ã»ÓÐÀàµÄʵÀý£©£¬Õâ¸ö·½·¨ÔÚÄÚ´æÖÐÏàÓ¦²úÉú£¬ÎÒÃǿɶÔÆä½øÐе÷Óá£

µÚÈýÖÖ¾ÍÊÇÒ»°ãµÄ·½·¨£¬ÐèÒªÔÚÉùÃ÷²¢¶¨ÒåÒ»¸öÀ࣬Õâʱ²úÉúÁËÀàµÄʵÀý£¬ÄÚ´æÖвÅÄܵõ½Õâ¸öʵÀýµÄµØÖ·£¬Õâʱ²Å¿ÉÒÔµ÷Óá£


--
> I like python!
> UliPad <>: http://wiki.woodpecker.org.cn/moin/UliPad
> My Blog: http://www.donews.net/limodou
> _______________________________________________
> python-chinese
> Post: send python-chinese在lists.python.cn
> Subscribe: send subscribe to python-chinese-request在lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request在lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese
-------------- 下一部分 --------------
Ò»¸öHTML¸½¼þ±»ÒƳý...
URL: http://python.cn/pipermail/python-chinese/attachments/20061205/fe9e0da9/attachment.html 

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年12月05日 星期二 20:53

limodou limodou在gmail.com
星期二 十二月 5 20:53:06 HKT 2006

On 12/5/06, boyeestudio <boyee118在gmail.com> wrote:
>
>
> 2006/12/5, limodou <limodou在gmail.com>:
> > On 12/5/06, leopay <leopay在gmail.com> wrote:
> > > classmethod,staticmethod,还有类里面一般的的method有什么区别?
> >
> > 定义方式,传入的参数,调用方式都不相同。
> >
> > staticmethod 不需要传入self和cls对象,只有一般的参数。可以通过实例或类对象进行调用。
> > classmethod需要传入cls对象,可以通过实例和类对象进行高用。
> > 一般的method需要传入self实例对象。
>
> 参与讨论一下:
>
> 从学习java中类比过来,
> 如果在一个文件范围内(文件中定义有类,类中还定义有方法):
> staticmethod相当于在一个包(文件)被导入时,这个方法在内存中就相应产生了。我们可以对它进行调用。
>
> classmethod相当于在一个类被声明时(没有定义,这时还没有类的实例),这个方法在内存中相应产生,我们可对其进行调用。
>
> 第三种就是一般的方法,需要在声明并定义一个类,这时产生了类的实例,内存中才能得到这个实例的地址,这时才可以调用。
>
>
其实方法就是代码,python在导入模块时会进行编译处理(如果需要的话),这时我想三种方法应该都已经存在了。所以这三种方法的生成时间倒不是什么问题,它们处理的范围和起到的作用是用来进行区分的依据。

-- 
I like python!
UliPad <>: http://wiki.woodpecker.org.cn/moin/UliPad
My Blog: http://www.donews.net/limodou

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2025

    京ICP备05028076号