
Nardis
08.03.2017
01:44:04

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

Boojum
08.03.2017
01:44:58

Nardis
08.03.2017
01:45:07

Google

Nardis
08.03.2017
01:47:04

Boojum
08.03.2017
01:47:42

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()

Nardis
08.03.2017
01:54:12

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
а надо 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
2) Вопрос второй, на том же примере: в строке aaa = self.fun1() этот self говорит искать методы в скоупе класса, верно? (абсолютно неочевидно поведение для человека, который видит это в первый раз, ну да ладно). В случае, если бы там написано было aaa = fun1(), то fun1 искалась бы в рамках какого скоупа, в рамках метода def3? или глобально за пределами класса?
этот self используется для обращения к текущему инстансу класса
неочевидно? да. костыль? возможно. можно ли иначе? нет
(зато можешь назвать не self, а hui, и писать hui.fun3(), но лучше придерживаться традиций)
если б ты писал aaa = fun1(), то искалось бы в рамках модуля, но не в рамках текущего класса
а, ну и еще в рамках метода def3 сначала, конечно

Nardis
08.03.2017
02:27:37

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

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

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

Pavel
08.03.2017
03:14:27


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

Google

Омурбек уулу
08.03.2017
08:46:54
а да
так нельзя делать файл да и модуль
он не понимает
питон

Tony
08.03.2017
08:47:18

Омурбек уулу
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)
Эта группа больше не существует