如何在类的构造函数中处理魔术变量

时间:2019-05-13 06:01:51

标签: python oop args

我的课堂上需要一个magic variable并开始编写

class myclass:
    def __init__(self, name, *args):
        self.name = name
        ????

    def myFunc()
        for i in args:
            print(i)

我只是找不到关于如何在构造函数中编写带有魔术变量的类并在以后使用它的正确解释。我是否必须从中创建一个self.成员(如果可以的话),还是可以忽略它而只像myFunc中那样使用args?

2 个答案:

答案 0 :(得分:2)

*args不是魔术变量,而是arbitrary argument listsvariadic arguments,它们用于向函数发送任意数量的参数,它们被包装在类似下面的例子

In [9]: def f(a,*args): 
   ...:     print(a) 
   ...:     print(args) 
   ...:                                                                                                                                                                           

In [10]: f(1,2,3,4)                                                                                                                                                               
1
(2, 3, 4)

因此,为了访问这些变量,您将对任何类实例变量进行操作,通过self.args = args对其进行分配,然后通过self.args进行访问

还要注意,对于类名,我们使用camel-case,因此对于函数,类名更改为MyClass,对于函数,snake-case则更改为my_func

class MyClass:
    def __init__(self, name, *args):
        self.name = name
        #Assigning variadic arguments using self
        self.args = args

    def my_func(self):
        #Accessing variadic arguments  using self
        for i in self.args:
            print(i)


obj = MyClass('Joe',1,2,3)
obj.my_func()

输出将为

1
2
3

答案 1 :(得分:1)

如果将args分配给self.args,则可以从其他方法访问它们。但是,此方法必须接受该类的实例作为其第一个参数(请参见下面的myFunc现在如何使用self的内容。)

class myclass:
    def __init__(self, name, *args):
        self.name = name
        self.args = args

    def myFunc(self):
        for i in self.args:
            print(i)