
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
Годно

Hannibal
30.04.2017
09:31:40

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

Michael
30.04.2017
09:40:27

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
а вот хардлинк уже нет, вроде

Марк
30.04.2017
12:39:01

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
❯

Марк
30.04.2017
12:42:49

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

Google

Igor
30.04.2017
12:43:35

Марк
30.04.2017
12:44:08

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

Марк
30.04.2017
12:44:52

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 симлинк идет по пизде

Igor
30.04.2017
12:55:51

Марк
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

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
В курсе на степике программируем на линукс это разбиралось

Марк
30.04.2017
13:20:27

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