Wpis z mikrobloga

class Prostokat:
....def __init__(self, bok1, bok2):
........self.bok1 = bok1
........self.bok2 = bok2

....def pole(self):
........print(self.bok1 * self.bok2)

p1 = Prostokat(3, 5)
def obiekt_atrybut():
....wybor = input('Co do wyprintowania? ')
....pass

-----------------------------------------------------------------------------------------------------------------

Czy można sobie za pomocą funkcji obiektatrybuty() wydrukować atrybuty jakiegoś obiektu, albo jego metody? Np. podajemy w inpucie 'p1.bok2, albo p1.pole() i to się wykonuje. Problemem jest oczywiście string, który wychodzi z inputa.

Przypuszczam, że nikt tak nie robi (i nie powinno się tak robić), ale ciekawi mnie, czy jest to w ogóle wykonalne.

#python #naukaprogramowania
  • 4
@CancerLight:

def obiekt_atrybut2(self):
wybor = input('Co do wyprintowania? ')
print(getattr(self, wybor))

obiekt_atrybut2(p1)
Ok, tak jak wyżej zadziała. Ale jeżeli w inpucie podalibyśmy jako całość np. 'p1.bok2', albo 'p1.pole()', to wtedy jak to można wywołać jak to będzie string?
@Rajtuz: to już powstanie jakiś potworek. Nie rób tak, bo nie widzę tutaj sensu tego robienia.
Da się to zrobić poprzez
instance, attr = wybór.split(".")
result = gettatr(globals[instance], attr)
if callable(result):
....print(result())
else:
....print(result)

Ale to jest śmietnik taki kod, powinno powstać dużo dodatkowego kodu typu warunek ile ma splitów itp...