当在\u init之外运行方法时,正在获取对象的无类型__

2024-09-29 19:30:49 发布

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

下一节课

class Member(object):
    def __init__(self, fields, scouts, id):
        self.id = id
        self.fields = fields
        self.scouts = scouts
        self.routes = [Route(s) for s in self.scouts ]
        self.routeBreak = []
        self.numScouts = len(self.scouts)

我用这个方法

^{pr2}$

示例:

Member.createMember()

但是,这样做之后,对象成员返回为“None”。我尝试将createMember()添加到init方法

class Member(object):
    def __init__(self, fields, scouts, id):
        self.id = id
        self.fields = fields
        self.scouts = scouts
        self.routes = [Route(s) for s in self.scouts ]
        self.routeBreak = []
        self.numScouts = len(self.scouts)
        random.shuffle(self.fields)
        self.routeBreak = self.createBreaks(len(self.fields))
        self.assignRoutes()

然后一切都好。我可以在对象上运行其他方法没问题。我不知道为什么会发生这种情况,我需要弄清楚如何在init方法之外运行createMember()。我对使用类和方法相当陌生,所以任何解释都会有帮助。谢谢!在


Tags: 方法selfidfieldslenobjectinitdef
2条回答

扩展Tim的问题,当使用类时,你有一个类定义,一个类型,然后是一个类的实例,对象。在

createMember应该作为实例的方法调用,而不是类本身的方法(有一种类型,即staticmethod或classmethod,它们没有“self”)。在

因此需要创建实例:

m = Member()

注意-您需要参数来完成此操作。如果不想让它不需要参数,那就需要多一点代码。 然后访问其中的方法:

^{pr2}$

您也可以在_init_Uu(称为构造函数)中调用它,其中“self”是实例:

self.createMember()

由于createMember需要一个参数self,它应该是实例本身,因此不能通过Member.createMember()调用它,因为这使它成为一个没有成员实例作为必需参数的未绑定方法。成员是类而不是实例。您必须通过Member.createMember(memberInstance)来调用它来显式地提供实例本身。在

Member().createMember()不需要给出参数是因为Member()创建了一个实例,该实例将隐式用作第一个参数self。在

相关问题 更多 >

    热门问题