Problem z wypisaniem

0

Witam,

robię powtórkę przed testami, próbowałem napisać kod, który posiada dwie klasy figura i klasę dziedziczącą kolo. Program miał za zadanie obliczyć obwód i pole koła dla danego r (r=12). Napisałem poniższy kod ale przy uruchomieniu programu zamiast wyników pojawiają się następujące komunikaty: <function kolo.obwod at 0x0050ADF8>
<function kolo.pole at 0x0050ADB0>. Czy ktoś mógłby mi wyjaśnić co robię źle?

    def __init__(self, obwod, pole,):
        self.obwod = obwod
        self.pole = pole

class kolo(figura):
    pi = 3.14
    def __init__(self, obwod, pole, r=12):
        self.r = r
        super(figura,self).__init__(obwod, pole)

    def pole(self):
        return 3.14*2*self.r
    def obwod(self):
        return 3.14*self.r**2

print(kolo.obwod)
print(kolo.pole)
2

Tak mogę powiedzieć co robisz źle. Nie wywołujesz tychże funkcji. Polecam je wywołać, dając () po ich nazwach, tj:

print(kolo.obwod())
print(kolo.pole())
1

Wypadałoby utworzyć obiekt klasy kolo.

0

Dzięki za odpowiedź, poprawiłem kod ale niestety nadal nie działa. ```

  File "C:/Users/user/.PyCharm2019.1/config/scratches/scratch.py", line 22, in <module>
    print(kolo.obwod())
TypeError: obwod() missing 1 required positional argument: 'self'
0
Pijak napisał(a):

Wypadałoby utworzyć obiekt klasy kolo.

Obiekt klasy koło już istnieje tylko się nie wkleił.

2

Obiekt klasy koło już istnieje tylko się nie wkleił.

To może go wklej. A tak przy okazji:

def __init__(self, obwod, pole, r=12):

Czyli tworząc obiekt klasy Kolo musisz podać jego pole i obwód, a potem je obliczyć - na moje ślepawe oko trochę to nie ma sensu.

Przyczepię się do jeszcze jednej rzeczy:

pi = 3.14
()
def pole(self):
return 3.142self.r
def obwod(self):
return 3.14*self.r**2

Po co to? O math.pi kolega pythonista nie słyszał?
A co do dziedziczenia z klasy figura - może klasa kolo mogłaby brać z niej np. kolor?

0
SFSG napisał(a):
Pijak napisał(a):

Wypadałoby utworzyć obiekt klasy kolo.

Obiekt klasy koło już istnieje tylko się nie wkleił.

Istnieje, a błąd ten sam?

Żeby utworzyć obiekt/instację, musisz napisac np.:

k = kolo()

i na tym obiekcie wykonywać operacje:

print(k.obwod())
print(k.pole())
1

Jak nie dasz () to nie wywołasz funkcji poza kilkoma bardzo szczególnymi trikami. Więc u ciebie brakuje () i po prostu wypisujesz "funkcje" zamiast "wyniku wywołania funkcji".

3

W powyższym przypadku napisanie nazwy funkcji bez nawiasu było błędem, jednak taki zapis również ma swoje zastosowanie. Dzięki temu w Pythonie można przekazywać funkcje jako argumenty innych funkcji/konstruktorów oraz zwracać funkcje. Z tym zagadnieniem powiązane są fachowe terminy takiej jak:

  • First Class Functions ,
  • Higher Order Functions,
  • Callback Functions.

Polecam wszystkim którzy nie znają, zainteresować się tematem i korzystać z dobrodziejstw programowania funkcyjnego.

1 użytkowników online, w tym zalogowanych: 0, gości: 1