在__init__之外运行方法时获取无类型的对象

时间:2014-11-22 19:15:35

标签: python class methods 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)

我运行此方法

def createMember(self):    
    random.shuffle(self.fields)
    self.routeBreak = self.createBreaks(len(self.fields))
    self.assignRoutes()

示例:

Member.createMember()

但是,执行此操作后,对象成员将返回“无”。我尝试将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()。我对使用类和方法相当新,所以任何解释都会有所帮助。谢谢!

2 个答案:

答案 0 :(得分:0)

扩展蒂姆的问题,在使用类时,你有类定义,类型,然后是类的实例,即对象。

createMember应该被称为一个实例的方法,而不是类本身的方法(有一种类型 - 静态方法或类方法,它们没有" self& #34;。)

所以你需要创建实例:

m = Member()

注意 - 你需要参数来做到这一点。如果您希望它不需要参数,则需要更多代码。 然后在其中访问该方法:

m.createMember()

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

self.createMember()

答案 1 :(得分:0)

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

Member().createMember()不需要提供参数是因为Member()已经创建了一个实例,它将隐式地充当第一个参数self