Питон: получить содержимое вместо адреса

User avatar
perasperaadastra
Уже с Приветом
Posts: 20128
Joined: 21 Feb 2009 22:55
Location: Лох Онтарио

Питон: получить содержимое вместо адреса

Post by perasperaadastra »

Допустим есть такой класс

Code: Select all

class PVector:

    def __init__(self, x, y):
        self.x = x
        self.y = y

    def add(self, V):
        return PVector (self.x + V.x, self.y + V.y)
Проблема:

Когда я делаю print (PVector(1,5)), я получаю адрес памяти:
<__main__.PVector object at 0x10535f358>
А я хочу получить tuple (self.x, self.y).

Один вариант — добавить такой метод в класс:

Code: Select all

    def __call__(self):
        return (self.x, self.y)
Но тогда нужно добавлять скобки:
Print (PVector(1,5)())

А можно ли сделать так, чтобы без скобок выдавался не адрес, а содержимое в формате tuple?

Например, если я делаю так:
x = (4,5)
print (x)
то я получаю содержимое, а не адрес. А как такое можно сделать для экземпляра класса (прошу прощения если я употребляю неправильные термины)?
User avatar
f_evgeny
Уже с Приветом
Posts: 10367
Joined: 12 Apr 2001 09:01
Location: Lithuania/UK

Re: Питон: получить содержимое вместо адреса

Post by f_evgeny »

Что-то типа такого:

Code: Select all

class PVector:
    def __init__(self,x,y):
        self.x = x
        self.y = y

    def __str__(self):
        return str((self.x,self.y))

    def __repr__(self):
        return str((self.x,self.y))
Добавил: Или вместо

Code: Select all

str((self.x,self.y))
Что нибудь типа:

Code: Select all

return "This is self.x: %s; this is self.y: %s" % (self.x, self.y)
Вообще что угодно будет выдавать при печати объектов.
Last edited by f_evgeny on 07 Dec 2015 23:04, edited 1 time in total.
Дальше, все будет только хуже. Оптимист.
User avatar
perasperaadastra
Уже с Приветом
Posts: 20128
Joined: 21 Feb 2009 22:55
Location: Лох Онтарио

Re: Питон: получить содержимое вместо адреса

Post by perasperaadastra »

То что надо! Спасибо большое!
User avatar
f_evgeny
Уже с Приветом
Posts: 10367
Joined: 12 Apr 2001 09:01
Location: Lithuania/UK

Re: Питон: получить содержимое вместо адреса

Post by f_evgeny »

Any time
Дальше, все будет только хуже. Оптимист.
Alexandr
Уже с Приветом
Posts: 3647
Joined: 23 May 2010 15:10

Re: Питон: получить содержимое вместо адреса

Post by Alexandr »

f_evgeny
только лучше таки не смешивать строковое представление и репрезентативное, так что для последнего лучше использовать представление, которое можно использовать, чтобы сконструировать исходный объект
User avatar
f_evgeny
Уже с Приветом
Posts: 10367
Joined: 12 Apr 2001 09:01
Location: Lithuania/UK

Re: Питон: получить содержимое вместо адреса

Post by f_evgeny »

Alexandr wrote:f_evgeny
только лучше таки не смешивать строковое представление и репрезентативное, так что для последнего лучше использовать представление, которое можно использовать, чтобы сконструировать исходный объект
Спасибо, нужно будет глянуть, обычно я так глубоко не копаю.
Дальше, все будет только хуже. Оптимист.

Return to “Вопросы и новости IT”