Problem z wypisaniem

Problem z wypisaniem
SF
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5
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?

Kopiuj
    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)
JA
  • Rejestracja: dni
  • Ostatnio: dni
2

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

Kopiuj
print(kolo.obwod())
print(kolo.pole())
Pijak
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 87
1

Wypadałoby utworzyć obiekt klasy kolo.

SF
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5
0

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

Kopiuj
  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'
SF
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5
0
Pijak napisał(a):

Wypadałoby utworzyć obiekt klasy kolo.

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

SE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 318
2

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

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

Kopiuj
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?

Spine
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6967
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.:

Kopiuj
k = kolo()

i na tym obiekcie wykonywać operacje:

Kopiuj
print(k.obwod())
print(k.pole())
Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
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".

Haskell
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 4700
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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.