Почему вам нужно назначить класс переменной, чтобы использовать ее? В отличие от функции

#python #function #class

Вопрос:

Я только учусь, и у меня есть путаница В этом коде, который я назначаю dice=Dice().. Почему бы просто не использовать Dice.roll()?? Он кричит на меня о позиционных аргументах ;( Не могли бы вы, пожалуйста, разъяснить разницу, зачем мне это нужно по сравнению с функциями?

 import random
class Dice:
    def roll(self):
        a=random.randint(1,6)
        b = random.randint(1, 6)
        return a,b


dice=Dice()
print(dice.roll())
 

Комментарии:

1.Вам следует перечитать об объектно-ориентированном программировании. dice = Dice() создает новый Dice объект и присваивает его dice переменной. Аналогичным образом вы могли бы создать еще один кубик, например: dice2 = Dice() . Теперь у вас есть два Dice объекта, но только один Dice класс. Это похоже на то, как у вас может быть несколько кубиков, лежащих на вашем столе, но все они демонстрируют одно и то же общее поведение.

2. Я рекомендую вам глубже изучить некоторые учебники по Python, чтобы узнать больше о классах. Этот пример выбран не очень удачно, так как он делает не что иное, как то, что могла бы делать функция. SO не является подходящим местом для замены учебных пособий.

3. Некоторые ключевые слова, описанные выше, — это экземпляр, класс и статические методы.

Ответ №1:

Посмотрите на dice функцию: для этого требуется один аргумент, self . Но когда вы звоните Dice.roll() , вы передаете нулевые аргументы, отсюда и ошибка.

Когда вы делаете dice.roll() , где dice находится экземпляр Dice класса, первый переданный аргумент автоматически заполняется dice объектом. Более явным способом его написания (в сторону переопределения) было бы Dice.roll(dice) .

Это не очень хороший пример использования классов, потому class что для начала здесь нет необходимости. Но представьте, что вы хотели бы иметь разные виды кубиков с разным количеством сторон, это было бы более полезно:

 class Die:
    def __init__(self, sides):
        self.sides = sides
    def roll(self):
        return random.randint(1, self.sides)

die = Die(6)      # Create a 6-sided die.

print(die.roll()) # Roll our D6.
 

Ответ №2:

Это не задание.

 dice=Dice()
 

создает и инициализирует dice объект как экземпляр Dice класса.
Класс-это шаблон, схема.
Вы должны создать объект, экземпляр этого класса, чтобы использовать его.