getMedianPE
- это функция (также называемая объектным методом, когда она является частью класса), поэтому ее необходимо вызывать в скобках. Если вы вызываете его без скобок, вы получите сам метод / функцию, а не результат вызова метода / функции.
Другая проблема состоит в том, что getMedianPE
возвращает функцию Guru.getMedianPE
, а не значение Guru.MedianPE
. Я не думаю, что вы хотите, чтобы MedianPE была переменной класса - вы, вероятно, просто хотите установить для нее значение по умолчанию 0 в init , чтобы у каждого объекта было свое собственное значение median_PE.
Кроме того, не стоит включать весь код очистки в ваш метод init . Его следует перенести в метод scrape () (или другое имя), который вы вызываете после создания экземпляра объекта.
Наконец, если вы собираетесь напечатать объект, полезно иметь str , поэтому я добавил сюда базовый c один.
Итак, собрав все эти комментарии, вот рекомендуемый рефакторинг вашего кода.
import requests
class Guru():
def __init__(self, ticket, median_PE=0):
self.ticket = ticket
self.median_PE = median_PE
def __str__(self):
return f'{self.ticket} {self.median_PE}'
def scrape(self):
try:
url = f"https://www.gurufocus.com/term/pettm/{self.ticket}/PE-Ratio-TTM/"
response = requests.get(url)
htmlText = response.text
firstSplit = htmlText
secondSplit = firstSplit.split("And the <strong>median</strong> was <strong>")[1]
thirdSplit = secondSplit.split("</strong>")[0]
lastSplit = float(thirdSplit)
self.median_PE = lastSplit
except ValueError:
print(f"{self.ticket}: Median PE N/A")
Тогда вы запускаете код
>>>g1 = Guru("AAPL")
...g1.scrape()
...print(g1)
AAPL 15.53