@ru_python

Страница 2756 из 9768
Igor
30.04.2017
09:25:49
что именно?

Michael
30.04.2017
09:26:21
У тебя меч становится объектом типа игрок

Igor
30.04.2017
09:26:27
у меня? нет

у Прокси? да

Google
Michael
30.04.2017
09:26:34
Со своим хп и прочими статами

Да, я про Прокси

Igor
30.04.2017
09:26:44
я ему то же самое говорю

фух :)

например у меня два класса player и sword. В player есть int heal, а в sword int dam. Как мне сделать так, что бы например при запуске метода из sowrd у меня из heal вычиталось dam ?
class Player: def __init__(self, name): self.name = name self.hp = 10 self.weapon = None def attack(self, opponent): if not self.weapon: raise Exception("Безоруженный, персонаж полез драться, сточил кулаки и умер.") opponent.hp = opponent.hp - self.weapon.damage class Mob: hp = 3 class Sword: damage = 4 alex = Player('Alex') # создали персонажа wolf = Mob() # создали волка, которого мы прикончим alex_sword = Sword() # создали меч для алекса alex.weapon = alex_sword # вручили алексу в руки оружие - меч alex.attack(wolf) # здесь делаем wolf.hp = wolf.hp - self.weapon.damage в общих чертах как-то так. надо сделать проверку, что оружие есть вообще, перед тем, как атаковать (и weapon = None по умолчанию)

Michael
30.04.2017
09:30:41
Годно

Igor
30.04.2017
09:35:20
Спасибо
я там дополнил на всякий случай %)

Artem
30.04.2017
09:36:33
кстати, в елочке-2015 одна из последних задач это как раз wizard simulator написать

Vasiliy
30.04.2017
09:38:06
не путай принадлежность с наследовнием

Artem
30.04.2017
09:39:07
https://github.com/banteg/adventofcode/blob/master/day_21.py

https://github.com/banteg/adventofcode/blob/master/day_22.py

Google
Igor
30.04.2017
09:43:13
advent of code

Vasiliy
30.04.2017
09:46:30
если мечи могут разные эффекты накладывать (не только hp снимать), то лучше сделать

Artem
30.04.2017
09:47:09
кстати, а можно как-то смерджить два репозитория? например, засунуть этот в ветку 2015, а второй репо в 2016

Vasiliy
30.04.2017
09:49:14
class Sword: damage = 4 def attack(sel, opponent) opponent.hp = opponent.hp - self.damage class Player: ... def attack(self, opponent): ... sel.weapon.attack(opponent)

Artem
30.04.2017
11:15:19
Sword еще можно унаследовать от Weapon и указывать в нем только урон, плюс можно будет перегружать метод атаки для всяких необычных случаев

Vasiliy
30.04.2017
11:20:18
В питоне duck typing, так что можно в принципе и не наследовать.

Artem
30.04.2017
11:22:19
речь о том, чтобы сделать так: class Weapon: def attack(self, target): target.hp -= self.damage class RustySword(Weapon): damage = 0.5

shadowjack
30.04.2017
11:22:35
Лучше список эффектов сделать полем.

А то вдруг захочется их стэкироваиь

Я бы статы передавал в конструктор параметром, например namedtuple.

Не вижу смысла наследовать если методы не меняются.

Если захочется описание оружия из текстового файла грузить?

Eldar
30.04.2017
11:31:15
Не вижу смысла наследовать если методы не меняются.
А почему бы и не наследоваться? Накладных расходов не должно быть

shadowjack
30.04.2017
11:39:11
Вопрос не в производительности. Не нужно городить иерархии там где они не нужны. Чтоб меньше печатать можно функцию сделать: def RustySword(): return Weapon(name="Rusty sword", damage=0.5)

Vasiliy
30.04.2017
11:42:09
как лучше сделать, зависит от сложности предметной области (в данном случае игры)

shadowjack
30.04.2017
11:42:24
Соглашусь.

Vasiliy
30.04.2017
11:43:06
если у оружия только дамаг и название, и почти у всех есть оружие, то можно это сделать просто атрибутами у структуры данных, которая описывает юнита

shadowjack
30.04.2017
11:43:22
Я вот MUD делал давным-давно (лет 17 назад).

Vasiliy
30.04.2017
11:46:10
если у нас оружие сложным образом работает по-разному в зависимости от фазы луны, типа местности и особенностей атакующего юнита и цели, то можно сделать стратегию, либо команду

если оружие генерируется процедурно, то стратегию довольно неудобно делать

Google
Vasiliy
30.04.2017
11:46:52
ну и т.д.

Марк
30.04.2017
12:31:13
Посоны

Кароч, вопрос

Допустим в линупсах я хуячу симлинк на файл, который ротейтится. Ну, какой-нибудь *.log. После ротейта симлинк наебнется или нет?

shadowjack
30.04.2017
12:34:48
Симлинк содержит имя файла на который он ссылается. Так что если файл будет существовать в то время когда кто-то попытается открыть симлинк, то все будет ок.

Igor
30.04.2017
12:35:10
а вот хардлинк уже нет, вроде

Igor
30.04.2017
12:39:25
в смысле - непонятно? какая разница, как происходит?

shadowjack
30.04.2017
12:39:50
Хардлинк это второе имя файла, они равноценны с исходным файлом.

Марк
30.04.2017
12:40:48
в смысле - непонятно? какая разница, как происходит?
Если при ротейте идет копирование, то не факт, что симлинк останется жив.

Igor
30.04.2017
12:41:03
копирование чего куда?

ros
30.04.2017
12:41:16
Вопрос такой себе, провокационный. Непонятно, как ротейт проиходит.
ротируется файл а не линки на него симлинк останется если не будет файла он будет невалидны, но всеравно будет

Марк
30.04.2017
12:41:20
копирование чего куда?
Ну ты понял, что такое ротейт?

Igor
30.04.2017
12:41:41
ну, мне кажется, я знаю, что такое ротейт логов, да

я не вижу проблемы

с учетом того, что

Симлинк содержит имя файла на который он ссылается. Так что если файл будет существовать в то время когда кто-то попытается открыть симлинк, то все будет ок.

❯ touch log1 ❯ ln -s log1 log ❯ ls -la log lrwxrwxrwx 1 ion ion 4 Apr 30 15:40 log -> log1 ❯ mv log1 log2 ❯ ls -la log lrwxrwxrwx 1 ion ion 4 Apr 30 15:40 log -> log1 (подсвечивает красненьким и log, и log1) ❯ cat log cat: log: No such file or directory ❯ touch log1 ❯ ls -la log lrwxrwxrwx 1 ion ion 4 Apr 30 15:40 log -> log1 ❯ cat log ❯

Igor
30.04.2017
12:43:24
и чо? сегодня 1.log, завтра появляется новый 1.log, а старый 1.log перепименовывается в 1.log.2

Google
Марк
30.04.2017
12:44:08
и чо? сегодня 1.log, завтра появляется новый 1.log, а старый 1.log перепименовывается в 1.log.2
Куда старый симлинк будет смотреть? А если фул копирование?

Igor
30.04.2017
12:44:27
тебе уже сто раз написали, что старый симлинк смотрит тупо на путь файла, который был указан при создании симлинка

Igor
30.04.2017
12:45:12
что значит наебнется?

я не понял, ты какое поведение хочешь ваще?

Марк
30.04.2017
12:45:42
Ну, у тебя был файл 1.log. Стал 1.log.2. Путь изменился

По твоей же логике

Admin
ERROR: S client not available

Igor
30.04.2017
12:46:18
да. и? нахуя мне хотеть, чтобы симлинк продолжал смотреть на 1.log.2?

Марк
30.04.2017
12:46:44
Это уже отдельный вопрос

Igor
30.04.2017
12:46:56
нихуя

по-моему, проще нормально ротейт настроить/syslogd/fluentd, чем ебать мозги какими-то симлинками

и, собственно, если хочется, чтобы продолжал ссылаться на новый путь к файлу, привет хардлинк

Oleksandr ror191505
30.04.2017
12:51:14
journald наше все

Марк
30.04.2017
12:55:25
Карочи, как и предполагалось, при mv симлинк идет по пизде

Марк
30.04.2017
13:00:33
чувак, я тебе это написал вооооооооот тут
Ты просто показал одну и реализаций

Igor
30.04.2017
13:01:15
да в смысле? я показал, что происходит, если создать симлинк на файл, переименовать файл и попробовать воспользоваться симлинком

Марк
30.04.2017
13:01:42
В варианте cp 1.log 1.log.2 rm 1.log линк наебывается нахуй

Google
Igor
30.04.2017
13:01:57
да

не нравится - не делай симлинк, делай хардлинк

целых три символа меньше при наборе команды, круто же

Марк
30.04.2017
13:07:30
cp довольно старая команда, еще с тех бородатых времен, когда ядро не поддерживало переименование в метафайлах

Victor
30.04.2017
13:10:16
В варианте cp 1.log 1.log.2 rm 1.log линк наебывается нахуй
Я считаю, это интуитивное поведение

Igor
30.04.2017
13:10:27
+1

Марк
30.04.2017
13:11:08
Блядь, как эта функция называвается переименования то?

А то даже нагуглить не могу

Igor
30.04.2017
13:11:20
ты наркоман что ли

mv

Марк
30.04.2017
13:11:35
Блеааать, игорь

Igor
30.04.2017
13:12:11
чтооооо

если хочешь переделать путь для симлинка, ну вызови ln -s еще раз

Марк
30.04.2017
13:12:22
Открой исходик mv. Там будет тебе cp + переименование в метаданных

Igor
30.04.2017
13:12:29
❯ ls -la symlink lrwxrwxrwx 1 ion ion 4 Apr 30 16:11 symlink -> log1 ❯ ln -s log2 symlink ln: replace ‘symlink’? y ❯ ls -la symlink lrwxrwxrwx 1 ion ion 4 Apr 30 16:12 symlink -> log2

Dmitriy
30.04.2017
13:12:41
Использование: rename [options] <expression> <replacement> <file>... Переименовать файлы. Параметры: -v, --verbose разъяснение выполняемых действий -s, --symlink act on the target of symlinks

Igor
30.04.2017
13:12:59
о даже как

Проксимов
30.04.2017
13:13:18
В курсе на степике программируем на линукс это разбиралось

Igor
30.04.2017
13:20:37
а че мешает rename писать-то тогда

Страница 2756 из 9768