Найти - Пользователи
Полная версия: вопрос с классами
Начало » Python для новичков » вопрос с классами
1
7slon7
Добрый день.
Помогите разобраться.
Изучаю классы на практике и хочу реализовать игру “кости” с их помощью. Задумка такая, при входе, идет приветствие, далее вопрос о количестве играков, вводим количество играков и в зависимости от того сколько их, столько создается и объектов класса, у каждого объекта есть переменная с именем и возрастом игрока, которая задается с клавиатуры. Создаю класс для объектов:
class Player(object):
    def __init__(self, name, age):
        self.name = name
        self.age= age
    def __str__(self):
        rep = "New player %s, %s age" %(self.name, self.age)
        return rep
    def name(self):
        self.name = input("Enter name new player: ")
        self.age= input("Enter he/she age: ")
        return (self.name, self.age)
ниже у меня есть ф-ия, которая запускает игру:
def start_game():
    print("Hello, welcom to new game - dist")
    players_num = int(input("How many players will play: "))
#    if not players_num.is_digit():
#        raise Exception("Incorrect number of players")
    players = [Player(). for i in range(players_num)]
    l_players = list(enumerate(players, start=1))
    print(l_players)
    return players_num, l_players
но как передать в конструктор имя для переменных name и age ? если вынести метод name из класса, и при запуске изначально этого метода, тогда я не понимаю, куда и как нужнжо передать эту функцию, что бы коннструктор получил name и age
покажите ресурс, где будет доступно расказано о такой ситуации, либо наведите на мысль
спасибо
FishHook
 player = Player(name, age)
Budulianin
7slon7
покажите ресурс, где будет доступно расказано о такой ситуации
David Ascher and Mark Lutz, Learning Python, 5th Edition
7slon7
немного уточню вопрос: в ф-ии start_game()
players = [Player.names() for i in range(players_num)]
создается объект класса players , который обращается к методу класса names() :
str
    def names():
        name = input("Enter name new player: ")
        old = input("Enter he/she old: ")
        return (name, old)
, который предлагает ввести имя и возраст, вопрос, к этому времени конструктор уже отработал ? если да, по получается, что он не получил свои значения self.name = name и self.age= age , тогда как его заставить эти значения получить ? или из-за того, что и метод и конструктов в классе ссылаются на один объект, конструктор возмет имя и возраст у метода names() по умолчанию ? и как затем заставить отработать метод __str__ , который должен выводить приветствие вновь созданному играку, судя по тому, что он выводит какую, то абра-кадабру либо ошибку, в конструктор имя и возраст, вновь созданного игрока, от метода names() не попадает
прошу помощи разобраться
FishHook
Городите.
Во-первых, __init__ - это не конструктор. Это инициализатор, который вызывается автоматически каждый раз после создания объекта.
Во-вторых, если у вас инит задан так
def __init__(a, b):
    pass
а объект вы создаете так
obj = MyClass()
то вы получите ошибку времени выполнения.
7slon7
тогда как его заставить эти значения получить
Вопрос потрясающе нелогичный. Чтобы передать в функцию параметры, их надо тупо туда передать.
obj = MyClass(a, b)
J.R.
7slon7
и хочу реализовать игру “кости”
Первый раунд:
$ dice -n 3 -p "J.R.,7slon7"
J.R.:......13
7slon7:....8
J.R.!
Пример упорной борьбы:
$ dice -n 3 -p "J.R.,7slon7"
7slon7:....14
J.R.:......14
No winner, one more throw:
7slon7:....25
J.R.:......28
J.R.!
Матч-реванш:
$ dice -n 3 -p "J.R.,7slon7"
7slon7:....9
J.R.:......9
No winner, one more throw:
7slon7:....17
J.R.:......17
No winner, one more throw:
7slon7:....30
J.R.:......23
7slon7!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB