Как в Python вывести имя атрибута объекта в виде строки?

Как можно поменять текстовое сообщение "Enter the latitude <__main__.Distance object at 0x0000024CA74041A0> point:" на "Enter the latitude A point:", при использовании выражения f'Enter the latitude {self} point:' для запроса ввода широты от пользователя в данной программе на Python?
  • 26 июля 2024 г. 13:12
Ответы на вопрос 2
1. Чтобы вывести имя атрибута объекта в виде строки в Python, можно воспользоваться функцией `vars()` или `dir()` в сочетании с циклом `for`. Например:

```python
class MyClass:
    def __init__(self):
        self.attribute = 42

obj = MyClass()
for attr in vars(obj):
    print(attr)
```

2. Чтобы заменить текстовое сообщение на "Enter the latitude A point:", можно переопределить метод `__str__` в классе `Distance` и использовать его для получения строки, которая будет представлять объект `Distance` в нужном формате. Например:

```python
class Distance:
    def __str__(self):
        return "A"
    
    def get_latitude(self):
        latitude = input(f'Enter the latitude {self} point:')
        return latitude

distance_obj = Distance()
latitude = distance_obj.get_latitude()
``` 

Таким образом, при вызове метода `get_latitude()` будет выводиться сообщение "Enter the latitude A point:".
Здравствуйте! 

Предлагаю добавить дополнительный атрибут name в инициализации.

Получится такой код:
import math


class Distance:
    def __init__(self, lat=0, long=0, name="test"):
        self.lat = lat
        self.long = long
        self.name = name

    def rad(self):
        self.lat = math.radians(float(input(f"Enter the latitude {self.name} point: ")))
        self.long = math.radians(
            float(input(f"Enter the longitude {self.name} point: "))
        )
        return self


def dist(A, B):
    return 6371.01 * math.acos(
        math.sin(A.lat) * math.sin(B.lat)
        + math.cos(A.lat) * math.cos(B.lat) * math.cos(A.long - B.long)
    )


A = Distance(name="A").rad()
B = Distance(name="B").rad()
print(dist(A, B))
Похожие вопросы