Kullanıcıdan alınan veriyi dir fonksiyonuna argüman olarak verip doğru çıktıyı almak

Merhaba arkadaşlar
Kendimi geliştirmek amaçlı ufak bir şey yazmıştım ancak bir sorun çıktı

a = input('Girin: ')
b = dir(a)

Bu kodlarda a değişkeni bir karakter dizisi olacağı için dir fonksiyonuna argüman olarak verince önüme karakter dizilerinin öğeleri geliyor. Mesela burada kullanıcı list yazdığında listelerin öğelerine erişebilsin istiyorum.
Bunu nasıl yapabilirim?

Merhaba, acaba aşağıdaki gibi bir şey mi yapmak istiyorsunuz?

import os

# Sözlüğün ön-tanımlı anahtar ve değerleri.
c = {
    "list": list(),
    "str": str(),
    "tuple": tuple(),
    "dict": dict(),
    "int": int(),
    "float": float(),
    "complex": complex(),
    "set": set(),
    "frozenset": frozenset(),
    "os": os
}

# Sözlüğe sonradan eklenen anahtar ve değerler.
for i in dir(os):
    c[f"os.{i}"] = i

# Kullanıcı list yazarsa a'nın tipi list olur.
# c sözlüğünün anahtarları dışında ne yazılırsa yazılsın bir KeyError 
# hatası yükseltilir. Try, except deyimini kullanarak, KeyError hatası
# oluştuğunda kullanıcıya farklı bir çıktı -örneğin dir(str)'yi- 
# gösterebilirsiniz.
a = c[input("Girin: ")]
b = dir(a)

print(b)
3 Beğeni

2 sene geçmiş, hortlatıyorum.

print(eval(f"dir({input('enter:')})"))

Daha güvenli bir şey istersek:

>>> import builtins
>>> dir(getattr(builtins, input()))
list
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
>>> 

Ayrıca dir'i sınıfın kendisi yerine sınıf örnekleri üzerinde kullanmanın burada çok da anlamı yok.