конвертировать python объектов в строку - PullRequest
0 голосов
/ 20 января 2020

У меня есть разные python классы, и я хочу преобразовать экземпляры этих классов в строки ascii. Предположим, у меня есть следующие объекты:

class A:
    name = "A"
    field = 2
    x = "a"

class B:
    name = "b"
    item = "c"

a = A()
b = B()

Мне нужна функция типа serialize(), которая преобразует следующие объекты:

serialize(a) # results "A2a"
serialize(b) # results "bc"

Я не хочу писать функцию сериализации для каждого класса, я хочу иметь функцию, способную сериализовать все классы. Один из способов - использовать функцию dir(), чтобы получить список атрибутов объекта, а затем создать из них строку, но функция dir() не возвращает атрибуты в том же порядке, в котором они определены. Например, вызов dir(a) вернет ['__doc__', '__module__', 'filed', 'name', 'x'], и я не могу узнать, какой атрибут определен первым в классе.

Спасибо.

Ответы [ 2 ]

2 голосов
/ 20 января 2020

Вы можете переопределить __repr__ функцию печати объекта желаемым способом:

class A:
    name = "A"
    field = 2
    x = "a"

    def __repr__(self):
        return A.name + str(A.field) + A.x
1 голос
/ 20 января 2020

Вы должны создать методы в своих классах: от имени, чтобы поместить значение в класс, лучше всего передать аргумент класса A во время вызова%

class A:
    def __init__(self, name, field, x) :
    self.name = name
    self.field = field
    self.x = x

   def serialize(self) :
       return f"{self.name}{self.field}{self.x}"

#main:
a=A(name="a", field="field", x="x") 
result=a.serialize()
print(result) 
...