• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

kontrola danych przy użyciu właściwości

Object Storage Arubacloud
0 głosów
96 wizyt
pytanie zadane 28 kwietnia 2021 w Python przez cba Użytkownik (620 p.)

Witam, mam zagwozdkę jak poradzić sobie z kontrolą danych gdzie punkty x i y mają być liczbami i w zadaniu mam Wykorzystać właściwości, aby zabezpieczyć atrybuty przed przypisaniem im niewłaściwych danych. Mój kod wygląda tak:

import math
class Point:
    def __init__(self, x, y):
        self._x = x
        self._y = y

    @property
    def x(self):
        return self._x

    @x.setter
    def x(self, x):
        if (isinstance(x, (str))):
            print("podana współrzędna x musi być liczba")

    @property
    def y(self):
        return self._y

    @y.setter
    def y(self, y):
        if (isinstance(y, (str))):
            print("podana współrzędna y musi być liczba")

    def __str__(self):
        return "Wspołrzędna x: {0.x}\nWspołrzędna y: {0.y}".format(self)

    def __repr__(self):
        return f"{self.__class__.__name__}({self.x},{self.y})"

    def __eq__(self, other):
        return self.x == other.x and self.y == other.y

    def distance_from_origin(self, x, y):
        odl = math.sqrt((0-x)**2+(0-y)**2)
        return odl

if __name__ == '__main__':
    x = int(input("podaj współrzedna x: "))
    y = int(input("podaj współrzedna y: "))
    wspol = Point(x, y)
    wspol2 = Point(5, 7)
    print(wspol)  # str
    print(repr(wspol))  # repr
    print(wspol.distance_from_origin(x, y))

i wiem ze to za bardzo sensu nie ma, i nie mam pojęcia jakby to zrobić właśnie za pomocą tych właściwości.

1 odpowiedź

0 głosów
odpowiedź 28 kwietnia 2021 przez d_bend Użytkownik (680 p.)

Najprostszy sposób to jest wykorzystanie modułu dataclasses z biblioteki standardowej. Wtedy ten kod wygląda następująco:

from dataclasses import dataclass
import math

@dataclass
class Point:
    x: float
    y: float

    def distance_from_origin(self) -> float:
        dist_squared = self.x**2 + self.y**2
        return math.sqrt(dist_squared)

Przydatne linki:

1. oficjalna dokumentacja https://docs.python.org/3/library/dataclasses.html

2. bardzo dobry artykuł na ten temat https://realpython.com/python-data-classes/

3. super film na yt https://www.youtube.com/watch?v=vBH6GRJ1REM&ab_channel=mCoding

komentarz 28 kwietnia 2021 przez cba Użytkownik (620 p.)
nie w tej rzeczy problem jest...tylko w pobraniu od użytkownika wartości i sprawdzenie jej przy użyciu właściwości. np w przypadku gdy podam litere pod wspołrzędna x

Podobne pytania

0 głosów
0 odpowiedzi 815 wizyt
0 głosów
1 odpowiedź 284 wizyt
pytanie zadane 8 sierpnia 2015 w Python przez Szykem2 Nałogowiec (29,510 p.)
0 głosów
2 odpowiedzi 185 wizyt
pytanie zadane 6 marca 2021 w Python przez cba Użytkownik (620 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...