2013-08-14 3 views
0

Кто-нибудь знает, есть ли способ создать экземпляр функции класса для еще не созданных объектов в Python? Я хотел бы что-то вроде этого:Как создать экземпляр функции класса для не созданных объектов?

class C(): 
    def __init__(self, var): 
     self.var = var 
    def f1(self): 
     self.var += 1 
    def f2(self): 
     self.var += 2 

cond = True 
if cond : f = C.f1 
else:  f = C.f2 

for i in xrange(1e7): 
    a = C(1) 
    for j in xrange(1e3): 
     a.f() 

Цель должна быть в состоянии использовать «F», как «мин», «Макс» или «средний» для nparrays в начале и не проверяя на каждом петлями, которые функционируют использовать.

+0

'f = rand(). Min', а затем' f (a) '? – Torxed

+0

Он не может работать, потому что 'rand()' возвращает скаляр. 'f = a.min', а затем' f() 'может работать, но в моем случае' a' может измениться. – Gmoaltos

+0

Никогда не использовал 'pylab', поэтому я прокомментировал догадку, проигнорировал мой вопрос :) – Torxed

ответ

0

Категории: a и b: numpy.ndarray. Вы импортировали ndarray, так что вы можете просто позвонить ndarray.min на a и b:

f = ndarray.min 
print f(a), f(b) 

Здесь ndarray.min(x) эквивалентно x.min().

Редактировать получение numpy.ndarray.min без явного знания типа вызова rand:

f = type(rand(int())).min 

Обратите внимание, что вы все еще должны знать, что этот тип имеет min функцию.

+0

Спасибо, что это именно то, что мне нужно. – Gmoaltos

+0

Но как это сделать, когда ndarray.min не существует? Если класс 'C' имеет разные функции' f1', 'f2' и' a' еще не создан как объект 'C', как писать' f' как 'C.f1' или' C.f2'? – Gmoaltos

+0

@Gmoaltos, возможно, вы можете проиллюстрировать это примером, потому что я не понимаю, о чем вы просите. – juanchopanza

0

Один не выполняет «экземпляр» функции; один экземпляр объектов, как экземпляры классов.

Теперь просто вызываем метод класса класса klass, вызывая метод в классе: klass.method(foo).

Если rand.min является функцией, которая может быть вызвана на a, тогда вы просто сделаете rand.min(a) или f(a).

+0

Я действительно не понял. Обычно вы делаете 'a.min()', и вы не можете делать 'y = rand.min' – Gmoaltos

+0

@Gmoaltos Что значит« обычно »? – Marcin

+0

Ничего страшного извините. Я понял. Спасибо – Gmoaltos

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