С небольшой модификацией вашего класса:
class ABC:
def __init__(self,debugFlag=False):
self.debugFlag = debugFlag # initialize the flag here or use default
def some_function()
if self.debugFlag is True:
print "Some debug logs"
После создания объекта вы сможете изменить его атрибуты, например:
obj_abc = ABC() # debug off by default
obj_abc.some_function() # no debug print
obj_abc.debugFlag = True # enable debug
obj_abc.some_function() # now with debug print
obj_abc.debugFlag = False # disable debug
obj_abc.some_function() # now without debug print
Не забывайте, что указатели можно рассматривать как итераторы:
w_.assign(w, w + len);
Быстрое решение могло быть:
std::vector<double> w_(w,w+len);
<час> или универсальный ответ:
std::vector<double> vec(carray,carray+carray_size);
<час> на основе выше : не забывают, что можно рассматривать указатели как итераторы
std :: vector
- это правильный путь, потому что это небольшой код . Но как это работает на самом деле? Разве не меняет размер, а потом копирует? В MS реализации STL я использую именно так.
Боюсь, что не существует более быстрого способа для реализации (пере) инициализации вашего std :: vector
.
Вы используете слово инициализировать, поэтому неясно, является ли это однократным назначением или может произойти несколько раз.
Если вам нужна только однократная инициализация, вы можете поместить ее в конструктор и использовать конструктор вектора с двумя итераторами:
Foo::Foo(double* w, int len) : w_(w, w + len) { }
В противном случае используйте assign, как было предложено ранее:
void set_data(double* w, int len)
{
w_.assign(w, w + len);
}