• 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

VPS Starter Arubacloud
0 głosów
92 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 787 wizyt
0 głosów
1 odpowiedź 280 wizyt
pytanie zadane 8 sierpnia 2015 w Python przez Szykem2 Nałogowiec (29,510 p.)
0 głosów
2 odpowiedzi 180 wizyt
pytanie zadane 6 marca 2021 w Python przez cba Użytkownik (620 p.)

92,454 zapytań

141,262 odpowiedzi

319,089 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...