Python2.7初学者错误:unbound方法

2024-05-11 22:57:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我刚开始学习python,最近在学习 类。 请看一下密码。在

class Critter(object):
    """your very own bug generator"""
    total=0
    def status(x):
        print Critter.total
        status=staticmethod(status)
    def __init__(self,name):
        print'a critter has been created'
        self.name=name
        Critter.total+=1


crit1=Critter('pooch')
crit2=Critter('Duff')
crit3=Critter('pluto')

Critter.status()
print'\nAccessing the class attributes through an object:',crit1.total

运行代码时,我得到以下错误:

^{pr2}$

我还不清楚绑定/未绑定是如何工作的。对于初学者的问题很抱歉,任何帮助都将不胜感激。在


Tags: nameself密码yourobjectdefstatusbug
2条回答

您的代码存在以下问题:

  • 缩进问题。您定义的任何需要绑定到类(即属于该类)的变量或方法都需要在该类下缩进一个级别。在
  • status=staticmethod(status)需要直接在类下定义,而不是在{}方法定义的范围内。因为status是指Critter.status()
  • status()方法不应采用任何参数x,至少基于您显示的Critter.status()调用。在

您看到的上述错误表明python无法识别类定义中的staticmethod调用,因为它的缩进不正确。因此python只是将status()方法定义为一个简单的实例方法(这是默认的)。对于实例方法,python希望第一个参数是实例句柄。在

这应该是有效的:

class Critter(object):
    """your very own bug generator"""
    total=0

    def status():
        print Critter.total
    status=staticmethod(status)

    def __init__(self,name):
        print 'a critter has been created'
        self.name=name
        Critter.total+=1

crit1=Critter('pooch')
crit2=Critter('Duff')
crit3=Critter('pluto')

Critter.status()
print'\nAccessing the class attributes through an object:',crit1.total

输出:

^{pr2}$

如果您使用的是python>;2.4(很可能是这样),那么可以使用@staticmethod修饰符来定义静态方法,如下所示:

class Critter(object):
    """your very own bug generator"""
    total=0

    @staticmethod
    def status():
        print Critter.total

    def __init__(self,name):
        print 'a critter has been created'
        self.name=name
        Critter.total+=1

更改代码至:

class Critter(object):
    """your very own bug generator"""

    total = 0

    @staticmethod
    def status():
        print Critter.total

    def __init__(self,name):
        print 'a critter has been created'
        self.name = name
        Critter.total += 1

若要查找有关绑定和未绑定方法的详细信息,请阅读以下内容Class method differences in Python: bound, unbound and static

相关问题 更多 >