Python 如何告诉类方法应该处理哪个变量
对不起,我的问题是noob。假设我有一个包含3个列表的类和一个将其中一个列表组合成字符串的方法。我怎样才能知道应该采用哪种方法?或者我应该将该方法从类中移到函数中 我的意思是: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):
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
将为示例中的第一个列表引发类型错误谢谢您的建议!我是新来的班级等,并认为有一个更封装的方式。将列表作为参数传递是可以的!谢谢