如何在python中调用类方法

如何在python中调用类方法,python,Python,我有以下课程: class SoftwarePackage: def __init__(self, name, description, order_of_installation, url): self.name = name self.description = description self.order_of_installation = order_of_installation self.url = "http:

我有以下课程:

class SoftwarePackage:
    def __init__(self, name, description, order_of_installation, url):
        self.name = name
        self.description = description
        self.order_of_installation = order_of_installation
        self.url = "http://localhost:9090/api/software_package"

        def create():
            post_data = {"name": self.name, "description": self.description,
                         "order_of_installation": self.order_of_installation}
            post_data = json.dumps(post_data)
            req = urllib2.Request(url, post_data)

            req.add_header('Content-Type', 'application/json')
            return urllib2.urlopen(req, post_data)
当我尝试像这样调用“create”方法时:

sp = SoftwarePackage(name="my-package-1", description="my-package-1-desc", order_of_installation=0, url="")
sp.create()
我得到这个错误:

   sp.create()
AttributeError: SoftwarePackage instance has no attribute 'create'

调用该类方法的正确方法是什么?

您创建了一个嵌套函数;您将其缩进到far,它是
\uuuu init\uuu
方法的一部分。它当前是该方法中的局部变量,不可用

取消使整个函数与
def\uuu init\uuu(…):
处于同一级别,并添加
self
参数:

class SoftwarePackage:
    def __init__(self, name, description, order_of_installation, url):
        self.name = name
        self.description = description
        self.order_of_installation = order_of_installation
        self.url = "http://localhost:9090/api/software_package"

    def create(self):
        post_data = {"name": self.name, "description": self.description,
                     "order_of_installation": self.order_of_installation}
        post_data = json.dumps(post_data)
        req = urllib2.Request(self.url, post_data)

        req.add_header('Content-Type', 'application/json')
        return urllib2.urlopen(req, post_data)

url
本地名称可能是实例上的
url
属性,因此我将其替换为
self.url

您使
创建了一个嵌套函数;您将其缩进到far,它是
\uuuu init\uuu
方法的一部分。它当前是该方法中的局部变量,不可用

取消使整个函数与
def\uuu init\uuu(…):
处于同一级别,并添加
self
参数:

class SoftwarePackage:
    def __init__(self, name, description, order_of_installation, url):
        self.name = name
        self.description = description
        self.order_of_installation = order_of_installation
        self.url = "http://localhost:9090/api/software_package"

    def create(self):
        post_data = {"name": self.name, "description": self.description,
                     "order_of_installation": self.order_of_installation}
        post_data = json.dumps(post_data)
        req = urllib2.Request(self.url, post_data)

        req.add_header('Content-Type', 'application/json')
        return urllib2.urlopen(req, post_data)

url
本地名称可能是实例上的
url
属性,因此我将其替换为
self.url

需要使用
self
引用
url
成员数据需要使用
self