#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
класса.
Класс-это шаблон, схема.
Вы должны создать объект, экземпляр этого класса, чтобы использовать его.