2012-02-21 2 views
0

Я хочу, чтобы определить, какой атрибут для поиска dynamicaly, Рассмотрим ниже код Python:Passing членом которой для поиска динамически

def f(x, a): 
    return x.a 

class X: 
    b = 4 

x = X() 
print(f(x, b)) 

Если питон имел это свойство, выше код должен напечатать 4.

Есть ли способ сделать это на любом языке? Я не могу представить способ с шаблонами C++ или динамической типизацией.

+0

как бы вы это сделали на любом языке, который не поддерживает типы с атрибутами? – moooeeeep

+0

Ну, вы можете написать интерпретатор Lisp в C++. Вы [Greenspunning] (http://c2.com/cgi/wiki?LevelsOfGreenspunning)? –

ответ

4

Я не думаю, что вы можете получить доступ к динамически атрибутов объектов, как вы пытаетесь. встроенная функция getattr позволит вам сделать это. Как Марчин предположил вы можете просто заменить п с getattr

http://docs.python.org/library/functions.html#getattr

def f(x, a) 
    return getattr(x, a) 

или

class X: 
    b = 4 

getattr(x, a) 

print(getattr(x, "b")) 
+0

большое спасибо! Я вижу, что вы можете сделать это с помощью встроенных функций python или с отражением C#. Что мне интересно: есть ли способ сделать это напрямую (без использования какой-либо функции библиотеки)? –

+0

@VolkanSirin У меня создается впечатление, что вы хотите больше узнать о атрибутах '__dict__' Python. Возможно [здесь] (http://docs.python.org/reference/datamodel.html) – moooeeeep

1

В Python, используйте dictionary

def f(x,a): 
    return x[a] 

x = {} 
x[b] = 4 
print f(x,b) 
+0

Я хочу, чтобы иметь возможность использовать функцию f с любым классом, включая те, которые я не могу изменить (в словарь) –

Смежные вопросы