Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在_init之外运行方法时获取对象的无类型___Python_Class_Methods_Init - Fatal编程技术网

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

Python 在_init之外运行方法时获取对象的无类型__,python,class,methods,init,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.numS

下节课

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()。我对使用类和方法相当陌生,所以任何解释都会有所帮助。谢谢

扩展Tim的问题,当使用类时,您有类定义、类型,然后是类的实例、对象

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

因此,您需要创建实例:

m = Member()
self.createMember()
注意-您需要参数来完成此操作。如果希望它不需要参数,则需要更多的代码。 然后访问其中的方法:

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

m = Member()
self.createMember()

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


Member();m、 createMember()
?我试过了,也试过了
Member().createMember()
(我不确定这是否合法)。我刚刚意识到我在创建
m=Member()
时忘了添加参数。谢谢你让我再看一眼那个派对!我意识到我的错误。在执行
m=Member()
时,我忘记了为init函数添加参数,而在尝试向init添加
createMember()
时,我记住了这些参数。不过,您的回答澄清了我对创建类和创建实例的一些困惑。谢谢