Как обрабатывать магические переменные в конструкторе класса - PullRequest
0 голосов
/ 13 мая 2019

Мне нужен magic variable в моем классе и я начал его писать

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

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

Я просто не смог найти правильное объяснение того, как написать класс с магическими переменными в конструкторе и использовать его позже.Нужно ли создавать self. член из него (и если да, то как) или я могу пренебречь им и просто использовать аргументы, как в myFunc?

Ответы [ 2 ]

2 голосов
/ 13 мая 2019

*args не называются магическими переменными, но списки произвольных аргументов или variadic 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 голос
/ 13 мая 2019

Если вы назначите 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...