# Πώς να χρησιμοποιήσετε τη στατική μέθοδο Python()

Οι στατικές μέθοδοι μπορούν να κληθούν απευθείας **μέσω του ονόματος της κλάσης** χωρίς να χρειάζεται να δημιουργηθεί μια παρουσία της κλάσης. Αυτή η ιδιότητα της Python `staticmethod` διευκολύνει τον σαφή διαχωρισμό της λογικής της κλάσης από τα δεδομένα της παρουσίας.

## Σε τι χρησιμοποιείται το Python `staticmethod`;

Το Python `staticmethod` είναι τόσο μια συνάρτηση όσο και ένας διακοσμητής. Χρησιμοποιείται για να ορίσει μεθόδους που λειτουργούν ανεξάρτητα από τις περιπτώσεις κλάσης. Οι διακοσμητές στο Python είναι συναρτήσεις που τροποποιούν τη συμπεριφορά άλλων μεθόδων προσθέτοντας συμπληρωματική λειτουργικότητα πριν ή μετά την εκτέλεσή τους, χωρίς να αλλάζουν τον αρχικό κώδικα της συνάρτησης. Σε αντίθεση με τις μεθόδους περίπτωσης, οι στατικές συναρτήσεις **δεν απαιτούν μια σιωπηρή παράμετρο** όπως `self`.

Η χρήση του `staticmethod` στην Python προσφέρει μια εστιασμένη προσέγγιση στη δομή των συναρτήσεων εντός των κλάσεων που δεν απαιτούν πρόσβαση σε δεδομένα παρουσίας. Δεδομένου ότι δεν είναι συνδεδεμένες με μια παρουσία, δεν μπορούν **να τροποποιήσουν την κατάσταση ενός αντικειμένου**. Εντός των κλάσεων, χρησιμεύουν ως πολύτιμα εργαλεία για την εκτέλεση κοινών εργασιών ή την παροχή καθολικής λειτουργικότητας. Για παράδειγμα, μπορούν να φιλοξενήσουν προγράμματα χρησιμότητας, ρουτίνες μετατροπής και γενικές βοηθητικές συναρτήσεις που μπορούν να κληθούν χωρίς δεδομένα παρουσίας.

## Ποια είναι η σύνταξη της Python `staticmethod`;

Υπάρχουν δύο τρόποι για να δημιουργήσετε στατικές μεθόδους στην Python. Μπορείτε να χρησιμοποιήσετε τη συνάρτηση `staticmethod()` ή τον διακοσμητή `@staticmethod`.

### `staticmethod()`

`staticmethod()` είναι μια ενσωματωμένη συνάρτηση Python που καθιστά μια μέθοδο μιας κλάσης **στατική**. Η τιμή επιστροφής του Python `staticmethod()` είναι μια στατική μέθοδος για τη συνάρτηση που μεταβιβάζεται ως όρισμα. Η σύνταξη είναι:

```python
class Class:
    def staticmethodFunc(x,y):
        return x + y
Class.staticmethodFunc = staticmethod(Class.staticmethodFunc)
print('Sum = ', Class.staticmethodFunc(5,7)) # Output: Sum = 12
```

Περνώντας τη συνάρτηση `staticmethodFunc()` που ορίζεται στην κλάση `Class` **ως όρισμα** στο `staticmethod()`, μπορούμε τώρα να καλέσουμε την προσαρμοσμένη μέθοδο απευθείας μέσω του ονόματος της κλάσης.

### `@staticmethod`

Ο διακοσμητής `@staticmethod` είναι μια συντομότερη και πιο συνηθισμένη μέθοδος για να επισημάνετε μια συνάρτηση ως στατική. Ο διακοσμητής τοποθετείται πάνω από τη μέθοδο **στον ορισμό της κλάσης**. Η σύνταξη είναι:

```python
class Class:
    @staticmethod
    def staticmethodFunc(x, y):
        return x + y
print('Sum = ', Class.staticmethodFunc(5,7)) # Output: Sum = 12
```

Ο διακοσμητής `@staticmethod` σηματοδοτεί στον **διερμηνέα** ότι η καθορισμένη συνάρτηση πρέπει να αντιμετωπίζεται ως στατική μέθοδος.

## Παραδείγματα κώδικα Python `staticmethod`

Μπορείτε να χρησιμοποιήσετε στατικές μεθόδους για διάφορες εργασίες. Ακολουθούν μερικά πρακτικά παραδείγματα για τον τρόπο χρήσης των στατικών μεθόδων.

### Μετατροπή μονάδων

Το Python `staticmethod` είναι πολύ χρήσιμο για τη μετατροπή μονάδων.

```python
class Converter:
    @staticmethod
    def hoursToMinutes(hours):
        return hours * 60
    @staticmethod
    def minutesToHours(minutes):
        return minutes / 60
hours = 3
converted_minutes = Converter.hoursToMinutes(hours)
print(f"{hours} hours are {converted_minutes} minutes.") # Output: 3 hours are 180 minutes.
minutes = 180
converted_hours = Converter.minutesToHours(minutes)
print(f"{minutes} minutes are {converted_hours} hours.") # Output: 180 minutes are 3 hours.
```

Σε αυτό το παράδειγμα, η κλάση `Converter` έχει δύο στατικές μεθόδους για τη μετατροπή μεταξύ ωρών και λεπτών. Η μέθοδος `hoursToMinutes()` μετατρέπει τις ώρες σε λεπτά, ενώ `minutesToHours()` μετατρέπει τα λεπτά σε ώρες.

Μπορούμε να καλέσουμε τις στατικές μεθόδους μέσω του ονόματος της κλάσης χωρίς να χρειάζεται να δημιουργήσουμε μια παρουσία της κλάσης. Η πρόσβαση σε αυτές γίνεται μέσω `Converter.hoursToMinutes()` ή `Converter.minutesToHours()`, όπου `Converter` είναι το όνομα της κλάσης. Εκτυπώνουμε το αποτέλεσμα σε μια **f-string**, μια μορφή συμβολοσειράς Python που συνδέει εκφράσεις.

### Βοηθητικές λειτουργίες για μαθηματικούς υπολογισμούς

Μπορείτε επίσης να χρησιμοποιήσετε τη στατική μέθοδο staticmethod() της Python για να ορίσετε βοηθητικές συναρτήσεις για δευτερεύοντες υπολογισμούς.

```python
class Calculator:
    @staticmethod
    def square(x):
        return x * x
    @staticmethod
    def sqroot(x):
        return x ** 0.5
num = 9
square = Calculator.square(num)
print(f"The square of {num} is {square}.") # Output: The square of 9 is 81.
root = Calculator.sqroot(num)
print(f"The square root of {num} is {root}.") # Output: The square root of 9 is 3.
```

Το παράδειγμα κώδικα παρουσιάζει την κλάση `Calculator` με στατικές μεθόδους για τον υπολογισμό του τετραγώνου και της τετραγωνικής ρίζας ενός αριθμού. Χρησιμοποιούμε τον διακοσμητή `@staticmethod` για να επισημάνουμε τις μεθόδους `square()` και `sqroot()` ως στατικές. Χωρίς να δημιουργήσουμε μια παρουσία της κλάσης, καλούμε τις μεθόδους μέσω του ονόματος της κλάσης. Συνδέουμε τα αποτελέσματα των `Calculator.square()` και `Calculator.sqroot()` σε μια συμβολοσειρά f.

### Επικύρωση συμμετοχών

Μια άλλη χρήση της στατικής μεθόδου της Python είναι η επικύρωση των εισροών.

```python
class Validator:
    @staticmethod
    def isInteger(num):
        try:
            int(num)
            return True
        except ValueError:
            return False
    @staticmethod
    def isDecimal(num):
        try:
            float(num)
            return True
        except ValueError:
            return False
input = "123"
is_integer = Validator.isInteger(input)
print(f"Is '{input}' an integer? {is_integer}") # Output: Is '123' an integer? True
input = "3.14"
is_dec = Validator.isDecimal(input)
print(f"Is '{input}' a decimal number? {is_dec}") # Output: Is '3.14' a decimal number? True
```

Η κλάση `Validator` περιλαμβάνει τις δύο στατικές μεθόδους: `isInteger()` και `isDecimal()`. Αυτές οι συναρτήσεις ελέγχουν αν μια δεδομένη είσοδος είναι ακέραιος ή δεκαδικός αριθμός. Η στατική μέθοδος Python `isInteger()` λαμβάνει μια είσοδο και προσπαθεί να την μετατρέψει σε ακέραιο `(int(num))`. Αν η μετατροπή είναι επιτυχής, επιστρέφεται `True`. Διαφορετικά, λαμβάνουμε `False` αν **εντοπιστεί** μια **εξαίρεση `ValueError`**, η οποία συμβαίνει όταν η επικύρωση δεν είναι δυνατή.

Χρησιμοποιούμε τη μέθοδο `isDecimal()` για να μετατρέψουμε την είσοδο σε δεκαδικό αριθμό `(float(num))`. Εάν η μετατροπή είναι επιτυχής, επιστρέφεται `True`, διαφορετικά επιστρέφεται `False`. Στη συνέχεια, χρησιμοποιούμε τις στατικές μεθόδους `isInteger()` και `isDecimal()` της κλάσης `Validator` για να ελέγξουμε τις εισόδους `"123"` και `"3.14"`. Τα αποτελέσματα είναι αληθή και για τις δύο συναρτήσεις.

### Χειρισμός συμβολοσειρών

Στο παρακάτω παράδειγμα, ορίζουμε την κλάση `StringManipulation` με τη στατική μέθοδο `reverseText()`. Αυτή λαμβάνει ένα κείμενο ως παράμετρο και χρησιμοποιεί τη σύνταξη τεμαχισμού `[::-1]` για να αντιστρέψει το κείμενο `"Hello World!"` και να επιστρέψει το αποτέλεσμα.

```python
class StringManipulation:
    @staticmethod
    def reverseText(text):
        return text[::-1]
input_text = "Hello World!"
result = StringManipulation.reverseText(input_text)
print(f"Reversed text of '{input_text}': {result}") # Output: Reversed text of 'Hello World!': !dlroW olleH
```


This is a markdown version of: [https://www.ionos.com/el-gr/digitalguide/istoselides/anaptyxi-istoselidon/python-staticmethod/](https://www.ionos.com/el-gr/digitalguide/istoselides/anaptyxi-istoselidon/python-staticmethod/) for AI/LLM consumption.