Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.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 如何告诉类方法应该处理哪个变量_Python - Fatal编程技术网

Python 如何告诉类方法应该处理哪个变量

Python 如何告诉类方法应该处理哪个变量,python,Python,对不起,我的问题是noob。假设我有一个包含3个列表的类和一个将其中一个列表组合成字符串的方法。我怎样才能知道应该采用哪种方法?或者我应该将该方法从类中移到函数中 我的意思是: class images(): def __init__(self, lista, listb, listc): self.lista=lista self.listb=listb self.listc=listc def makelist(self):

对不起,我的问题是noob。假设我有一个包含3个列表的类和一个将其中一个列表组合成字符串的方法。我怎样才能知道应该采用哪种方法?或者我应该将该方法从类中移到函数中

我的意思是:

class images():
    def __init__(self, lista, listb, listc):
        self.lista=lista
        self.listb=listb
        self.listc=listc

    def makelist(self):
        items = ""
        for item in self.whateverListIWant:
            items=items+item
        return items

test=images([1,2,3],["b"],["c"])
print (test.makelist(WhichListIWant))
你可以这样做

class images():
    def __init__(self, lista, listb, listc):
        self.lista=lista
        self.listb=listb
        self.listc=listc

    def makelist(self, param):
        items = ""
        for item in param:
            items= items + str(item)
        return items

test=images([1,2,3],["b"],["c"])
print (test.makelist(test.lista))
你可以这样做

class images():
    def __init__(self, lista, listb, listc):
        self.lista=lista
        self.listb=listb
        self.listc=listc

    def makelist(self, param):
        items = ""
        for item in param:
            items= items + str(item)
        return items

test=images([1,2,3],["b"],["c"])
print (test.makelist(test.lista))
请注意,“类方法”(由decorator指示)不是示例中的方法。您的是一个标准对象方法,它作用于您创建的对象,通过使用“self”作为第一个参数来突出显示

object方法作用于对象,可以引用self中包含的数据。“类方法”只作用于类,并且只使用该类可用的参数

类方法的使用如下所示:

class ClassyImages():
    lista = []
    listb = []
    listc = []

    @classmethod
    def makelist(cls, which):
        if which == 'a':
            the_list = cls.lista
        elif which == 'b':
            the_list = cls.listb
        elif which == 'c':
            the_list = cls.listc
        else:
            raise ValueError("Invalid value " + str(which))

        return the_list[:]  # returns a soft copy of the list
您将按如下方式使用它:

ClassyImages.lista.extend([1,2,3])
ClassyImages.listb.add("b")
ClassyImages.listc.add("c")

print(ClassyImages.makelist("a"))
看到区别了吗?在您的示例中,您正在对创建的对象实例使用方法。在这种情况下,我们只使用类级变量,而从不使用对象的实例

然而,
@classmethod
装饰器的一个很好的特性是,您仍然可以在对象上使用class方法。所以你也可以这样做:

my_classy_object_1 = ClassyImages()
my_classy_object_2 = ClassyImages()

print(my_classy_object_1.makelist("b"))  # prints: ['b']
ClassyImages.listb.add("bb")
print(my_classy_object_1.makelist("b"))  # prints: ['b', 'bb']
print(my_classy_object_2.makelist("b"))  # prints: ['b', 'bb']
我的回答掩盖了你可能真正想问的问题——如何告诉它要看哪个列表。您可以按照的建议将列表插入参数中。或者您可以将字符串或数字传递到函数中,类似于我对类级makelist所做的操作。这在很大程度上取决于您-提供任何看起来最合适、最方便的方式,让makelist的逻辑选择要查看的组件。

请注意,“类方法”(由decorator指示)不是示例中的方法。您的是一个标准对象方法,它作用于您创建的对象,通过使用“self”作为第一个参数来突出显示

object方法作用于对象,可以引用self中包含的数据。“类方法”只作用于类,并且只使用该类可用的参数

类方法的使用如下所示:

class ClassyImages():
    lista = []
    listb = []
    listc = []

    @classmethod
    def makelist(cls, which):
        if which == 'a':
            the_list = cls.lista
        elif which == 'b':
            the_list = cls.listb
        elif which == 'c':
            the_list = cls.listc
        else:
            raise ValueError("Invalid value " + str(which))

        return the_list[:]  # returns a soft copy of the list
您将按如下方式使用它:

ClassyImages.lista.extend([1,2,3])
ClassyImages.listb.add("b")
ClassyImages.listc.add("c")

print(ClassyImages.makelist("a"))
看到区别了吗?在您的示例中,您正在对创建的对象实例使用方法。在这种情况下,我们只使用类级变量,而从不使用对象的实例

然而,
@classmethod
装饰器的一个很好的特性是,您仍然可以在对象上使用class方法。所以你也可以这样做:

my_classy_object_1 = ClassyImages()
my_classy_object_2 = ClassyImages()

print(my_classy_object_1.makelist("b"))  # prints: ['b']
ClassyImages.listb.add("bb")
print(my_classy_object_1.makelist("b"))  # prints: ['b', 'bb']
print(my_classy_object_2.makelist("b"))  # prints: ['b', 'bb']

我的回答掩盖了你可能真正想问的问题——如何告诉它要看哪个列表。您可以按照的建议将列表插入参数中。或者您可以将字符串或数字传递到函数中,类似于我对类级makelist所做的操作。很大程度上取决于您-提供任何看起来最合适、最方便的方式,让makelist的逻辑选择要查看的组件。

为什么不传递您想用作参数的列表?旁注:
items+item
将为示例中的第一个列表引发类型错误谢谢您的建议!我是新来的班级等,并认为有一个更封装的方式。将列表作为参数传递是可以的!感谢为什么不只是传递您想用作参数的列表?旁注:
items+item
将为示例中的第一个列表引发类型错误谢谢您的建议!我是新来的班级等,并认为有一个更封装的方式。将列表作为参数传递是可以的!谢谢