@python_beginnersЭта группа больше не существует

Страница 1359 из 1885
Nardis
08.03.2017
01:44:04
не надо делать self.fun1(self)
??? Выше же сам прислал скриншот с таким кодом (причем, рабочим). Я, конечно, удивился, но скопировал.

Igor
08.03.2017
01:44:07
т.е. когда ты вызываешь методы извне, то просто игнорируй селф, не надо его передавать

Nardis
08.03.2017
01:45:07
Google
Nardis
08.03.2017
01:47:04
/python3 class Test(object): def fun1(self): return "1st function" def fun2(self): return "2nd function" def fun3(self): aaa = self.fun1(self) bbb = self.fun2(self) ccc = aaa + bbb return ccc print(Test.fun3(Test))
Так. Этот код рабочий или нет, но тут намек намек на решение? Потому что не работает, и меня уже порядком заебало третий час классы раздуплять. Это же пайтон, а не Хаскель, ну серьезно (хоть там и нет классов).

Igor
08.03.2017
01:48:18
да бля. зачем писать хуйню и оправдываться тем, что интерпретатор сжирает?

Nardis
08.03.2017
01:48:18
Traceback (most recent call last): File "test.py", line 13, in <module> print(Test.fun3(Test)) TypeError: unbound method fun3() must be called with Test instance as first argument (got type instance instead)

Igor
08.03.2017
01:48:21
:(

ааааааааааааааа

короче :)

Boojum
08.03.2017
01:50:31
лол

Nardis
08.03.2017
01:50:40
Пиздос, я python-babel раздуплил за полтора часа в первый раз, а тут сраный синтетический класс.

Все, идеи иссякли? Стучимся старшим в rude_python? ?

Igor
08.03.2017
01:53:24
class Test(object): def fun1(self): print("Hi. I'm fun1. I don't have any parameters.") def fun2(self, how_much_fun): print("Hi. I'm fun2. I have {0} much fun!".format(how_much_fun)) @staticmethod def fun3(): print("I'm a static method. I have no access to fun1 and fun2.") def fun1and2(self): print("I'm fun1and2. Now I'll run fun1 and fun2 methods:") self.fun1() self.fun2(500) print("fun1and2 finished working. Bye-bye") test = Test() test.fun1() test.fun2(100) test.fun1and2() Test.fun3() test.fun3()

Google
Igor
08.03.2017
01:57:08
в плане - в конкатенацию? если ты хочешь конкатенировать строки, то надо, чтобы методы не делали print, а возвращали собственно строки

Nardis
08.03.2017
01:57:20
fun1and2() просто тупо два раза печатает захардкоженый текст, вместо того, чтобы взять его из fun1 и fun2

Igor
08.03.2017
01:57:22
а, ну собственно ты так и делаешь

да

Nardis
08.03.2017
01:57:35
Igor
08.03.2017
01:57:49
Traceback (most recent call last): File "test.py", line 15, in <module> asd.fun3() File "test.py", line 9, in fun3 aaa = self.fun1(self) TypeError: fun1() takes exactly 1 argument (2 given)
вот етот код вполне себе нормальный, за исключением того, что ты делаешь aaa = self.fun1(self)

а надо aaa = self.fun1()

так же с fun2

Nardis
08.03.2017
01:58:03
Igor
08.03.2017
01:58:39
сорри, я просто подумал, что у тебя непонятка именно при работе с self'ом, ибо последние полчаса я вижу какие-то неведомые ебаные косяки))

Nardis
08.03.2017
01:59:20
class Test(object): def fun1(self): return "1st function" def fun2(self): return "2nd function" def fun3(self): aaa = self.fun1() bbb = self.fun2() ccc = aaa + bbb return ccc Test.fun3(Test) >>Traceback (most recent call last): File "test.py", line 12, in <module> Test.fun3(Test) TypeError: unbound method fun3() must be called with Test instance as first argument (got type instance instead) Ну, тоже же самое же, ну.

asd = Test() asd.fun3() тоже не помогает

ВСЁЁЁ

РАБОТАЕТ

Ура.

#!/usr/bin/python3 class Test(object): def fun1(self): return "1st function" def fun2(self): return "2nd function" def fun3(self): aaa = self.fun1() bbb = self.fun2() ccc = aaa + bbb return ccc asd = Test() print(asd.fun3())

Вот оно, решение. Всем спасибо.

Три часа, мать его.

Boojum
08.03.2017
02:02:34
Интересно, почему у рекстестера все работает

Nardis
08.03.2017
02:04:31
Так, не отходя далеко от моего примера: 1) Вопрос первый: print(Test().fun3()) против asd = Test() print(asd.fun3()) *Нужно* ли создавать и работать в скрипте с инстансом класса, или можно обходиться без присваивания класса переменной (создания инстанса)? Как правильно и почему?

Google
Nardis
08.03.2017
02:08:42
2) Вопрос второй, на том же примере: в строке aaa = self.fun1() этот self говорит искать методы в скоупе класса, верно? (абсолютно неочевидно поведение для человека, который видит это в первый раз, ну да ладно). В случае, если бы там написано было aaa = fun1(), то fun1 искалась бы в рамках какого скоупа, в рамках метода def3? или глобально за пределами класса?

3) Ну, и до кучи третий вопрос: #!/usr/bin/python3.6 """ DynDNS Renewer ~~~~~~~~~~~~~~ Update DynDNS record if broadcast IP has changed :copyright: (c) 2017 by nrds :license: BSD. """ import subprocess import ipaddress from requests import get class GetBroadcastIP(object): def get_hostname_ip(self): """Get current broadcast IP using built-in `hostname -I`s response""" output = subprocess.run("hostname -I", shell=True, stdout=subprocess.PIPE, universal_newlines=True) return str(output.stdout.split(' ')[0]) def get_external_ip(self): """Get current external IP using external `ipapi.co` service""" return str(get('https://ipapi.co/ip/').text) def verify_ip(self): """Verify that local hostname and external broadcast IP are equal""" hostname_ip = self.get_hostname_ip() external_ip = self.get_external_ip() try: if not hostname_ip == external_ip: raise ValueError('Error: Hostname and external IP addresses are not equal!') else: print(f'Broadcast IP: {hostname_ip}\nCompare is OK') except ValueError as ve: print(ve) class RewnewDynDNS(object): """TODO! Implement""" pass if __name__ == '__main__': print('\nCheck and renew DynDNS with a new broadcast IP address.') print('---------------------------------------------------------') run = GetBroadcastIP() run.verify_ip() Какие очевидные "архитектурные" глупости в этом куске кода? Опустим вопросы вторичности велосипеда, привязки к Linux (hostname) и ipapi.co.

Igor
08.03.2017
02:25:42
Nardis
08.03.2017
02:25:46
Соб-но class RewnewDynDNS(object): будет представлять из себя банальный GET-запрос с помощью requests. Одна строчка + проверки.

Igor
08.03.2017
02:26:39
если б ты писал aaa = fun1(), то искалось бы в рамках модуля, но не в рамках текущего класса

а, ну и еще в рамках метода def3 сначала, конечно

Nardis
08.03.2017
02:27:37
этот self используется для обращения к текущему инстансу класса неочевидно? да. костыль? возможно. можно ли иначе? нет (зато можешь назвать не self, а hui, и писать hui.fun3(), но лучше придерживаться традиций)
да, попадал в процессе решения этой конкретной задачи сегодня на SO с указанием на то, что self — конвенция, но не резервированое имя, что так принято.

Igor
08.03.2017
02:27:37
прости, недочитал

Nardis
08.03.2017
02:28:25
Igor
08.03.2017
02:28:53
да )

Nardis
08.03.2017
02:28:58
ок, спасибо

Igor
08.03.2017
02:32:12
архитектурно ниче совсем криминального не вижу, но я уже тупить могу, спать хочется я бы сделал hostname_ip/external_ip пропертями (@property), а не get-методами str() в get_external_ip явно лишнее. в get_hostname_ip, полагаю, тоже

Nardis
08.03.2017
02:33:53
архитектурно ниче совсем криминального не вижу, но я уже тупить могу, спать хочется я бы сделал hostname_ip/external_ip пропертями (@property), а не get-методами str() в get_external_ip явно лишнее. в get_hostname_ip, полагаю, тоже
Спасибо большое, соб-но ты решил все мои беды этой ночи. Завтра буду перечитывать твои ответы, читать про проперти и дописывать свой костыль.

Igor
08.03.2017
02:34:36
уруру

Nardis
08.03.2017
02:35:24
Все, спокойной ночи, всем спасибо, завтра продолжу бой))

Pavel
08.03.2017
03:14:27
3) Ну, и до кучи третий вопрос: #!/usr/bin/python3.6 """ DynDNS Renewer ~~~~~~~~~~~~~~ Update DynDNS record if broadcast IP has changed :copyright: (c) 2017 by nrds :license: BSD. """ import subprocess import ipaddress from requests import get class GetBroadcastIP(object): def get_hostname_ip(self): """Get current broadcast IP using built-in `hostname -I`s response""" output = subprocess.run("hostname -I", shell=True, stdout=subprocess.PIPE, universal_newlines=True) return str(output.stdout.split(' ')[0]) def get_external_ip(self): """Get current external IP using external `ipapi.co` service""" return str(get('https://ipapi.co/ip/').text) def verify_ip(self): """Verify that local hostname and external broadcast IP are equal""" hostname_ip = self.get_hostname_ip() external_ip = self.get_external_ip() try: if not hostname_ip == external_ip: raise ValueError('Error: Hostname and external IP addresses are not equal!') else: print(f'Broadcast IP: {hostname_ip}\nCompare is OK') except ValueError as ve: print(ve) class RewnewDynDNS(object): """TODO! Implement""" pass if __name__ == '__main__': print('\nCheck and renew DynDNS with a new broadcast IP address.') print('---------------------------------------------------------') run = GetBroadcastIP() run.verify_ip() Какие очевидные "архитектурные" глупости в этом куске кода? Опустим вопросы вторичности велосипеда, привязки к Linux (hostname) и ipapi.co.
я бы сделал verify_ip и get_external_ip `@staticmethod`ами. Всё равно инстанс этого класса ничего не даёт.

53r63rn4r
08.03.2017
04:26:49
С 8 марта, милые дамы :)

Dmitriy
08.03.2017
05:41:23
Женщины, с праздником!

Google
Dmitry
08.03.2017
07:35:37
как библиотека называлась для работы с env vars кто помнит?

Dmitriy
08.03.2017
07:35:48
dotenv?

Dmitry
08.03.2017
07:35:51
а

Admin
ERROR: S client not available

Dmitry
08.03.2017
07:35:55
спасибо)

Tony
08.03.2017
08:38:12
from application.person.person import Person





wtf???

Омурбек уулу
08.03.2017
08:41:40
хахаха

хотел папку импортнуть ?

Tony
08.03.2017
08:42:45
из папки класс

Омурбек уулу
08.03.2017
08:43:01
еще лучше

питон должен знать что это скелет

Tony
08.03.2017
08:43:52
ну так а что делать то?

как ему явно указать?

Омурбек уулу
08.03.2017
08:45:35
переменуй person.py

у тебя модуль так называется, и файл

Tony
08.03.2017
08:46:20
та же ошибка

Dmitriy
08.03.2017
08:46:35
переменуй person.py
начать с application.py

Google
Омурбек уулу
08.03.2017
08:46:54
а да

так нельзя делать файл да и модуль

он не понимает

питон

Tony
08.03.2017
08:47:18
начать с application.py
вот так вот заработало

Омурбек уулу
08.03.2017
08:47:46
походу ты не знаешь что такое скелет в питоне ?

Tony
08.03.2017
08:47:53
да понял уже

Омурбек уулу
08.03.2017
08:48:09
а где спасибо

?

хехех

шучу

Tony
08.03.2017
08:48:20
cgfcb,j)

spasibo)

Страница 1359 из 1885

Эта группа больше не существует Эта группа больше не существует