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.
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...
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
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?
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...