Почему ниже часть кода python дает ошибку атрибута? - PullRequest
0 голосов
/ 18 июня 2020
class TempClass():
def __init__(self,*args):
    for i in range(len(args)):
        self.number1=args[0]
        self.number2=args[1]
    print(self.number1,self.number2)

temp1=TempClass(10,20)

вывод: 10 20

class TempClass2():
def __init__(self,*args):
    for i in range(len(args)):
        self.number1=args[0]
        self.number2=args[1]
    print(self.number1)
    print(self.number1[0],self.number2)

temp2=TempClass2([10,20],40)

вывод: [10, 20]

class TempClass3():
def __init__(self,*args):
    for i in range(len(args)):
        self.number1[0]=args[0]
        self.number1[1]=args[1]
    print(self.number1)
temp3=TempClass3(10,20)

вывод: AttributeError: объект 'TempClass3' не имеет атрибута 'number1'

Мой вопрос в TempClass3. Я пытался создать список, передав параметры для построения. почему это невозможно ??

Примечание: я пытался сделать это, изучая концепции OOps в python .. пожалуйста, предложите мне, если мой вопрос сам по себе бессмыслен.

Ответы [ 3 ]

1 голос
/ 18 июня 2020

Вам сначала нужно инициализировать self.number1 с помощью [None] * 2 (или аналогичного) перед его использованием.

Однако я бы использовал args напрямую:

class TempClass3():
    def __init__(self,*args):
        self.number1 = list(args)
        print(self.number1)


temp3=TempClass3(10,20)
0 голосов
/ 18 июня 2020

В этом коде:

class TempClass3():
    def __init__(self,*args):
        for i in range(len(args)):
            self.number1[0]=args[0]
            self.number1[1]=args[1]
        print(self.number1)

вы пытаетесь получить доступ к списку с именем self.number1, который еще не существует. Вместо этого вы хотите сделать что-то вроде:

class TempClass3():
    def __init__(self,*args):
        self.number1 = []  # create an empty list we can append to
        self.number1.append(args[0])
        self.number1.append(args[1])
        print(self.number1)

или, может быть:

class TempClass3():
    def __init__(self,*args):
        self.number1 = [args[0], args[1]]  # create a list with two elements
        print(self.number1)

или, если вам просто нужны все аргументы, а не только первые два, просто:

class TempClass3():
    def __init__(self,*args):
        self.number1 = list(args)  # create a list from the contents of a tuple
        print(self.number1)
0 голосов
/ 18 июня 2020

Когда вы вызываете self.number1 [0] = args [0], вы просите python сначала открыть список self.number1, который не существует, а затем найти элемент в этом несуществующем списке.

Если он не существует, но вы передаете ему значение, например self.number1 = args [0], python создаст self.number1 и определит self.number1 как args [0].

Это можно исправить, добавив строку self.number1 = [0,0] в начале tempclass3, чтобы список уже существовал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...