Как класс не может иметь никакого конструктора?

Использование iloc с np.where :

idx = next(iter(df['number'].iloc[np.where(df['color'].eq('blue'))]), -1)  # 4

Обратите внимание, что это также обрабатывает случай, когда цвет не существует. Для сравнения df['color'].eq('orange').idxmax() дает 0, хотя 'orange' не существует в ряду. Вышеуказанная логика даст -1.

numba

Мне интересно, есть ли какой-либо более оптимальный подход, учитывая, что мне нужно только первое появление.

blockquote>

Да! Более эффективное решение см. В . Эффективно вернуть индекс первого значения, удовлетворяющего условию в массиве . Numba позволяет эффективно выполнять итерацию по строкам. В этом случае вам нужно будет сначала разложить на множители строки , чтобы вы передавали числовые массивы только в Numba:

from numba import njit

# factorize series, pd.factorize maintains order,
# i.e. first item in values gives 0 index
idx, values = pd.factorize(df['color'])
idx_search = np.where(values == 'blue')[0][0]

@njit
def get_first_index_nb(A, k):
    for i in range(len(A)):
        if A[i] == k:
            return i
    return -1

res = df['number'].iat[get_first_index_nb(idx, 1)]  # 4

Конечно, для одноразовых вычислений это неэффективно , Но для последовательных вычислений решение, скорее всего, будет фактором быстрее, чем решения, которые проверяют равенство по всей серии / массиву.

12
задан Blade 28 October 2008 в 14:05
поделиться

8 ответов

Конструктор может быть частным или защищен.
Также Вы не можете создать экземпляр абстрактного класса, даже если тот класс имеет общедоступного конструктора.

24
ответ дан 2 December 2019 в 03:49
поделиться

HttpContext имеет общедоступного конструктора с двумя перегрузками, но это не значение по умолчанию (никакие параметрические усилители) один.

Как пример, необходимо передать в экземпляре SimpleWorkerRequest, чтобы к instatiate экземпляр HttpContext и присваивает его HttpContext. Текущий:

//Initialize this stuff with some crap
string appVirtualDir = "/"; 
string appPhysicalDir = @"C:\Documents and Settings\"; 
string page = @"localhost"; 
string query = string.Empty; 
TextWriter output = null;    
//Create a SimpleWorkerRequest object passing down the crap
SimpleWorkerRequest workerRequest = new SimpleWorkerRequest(appVirtualDir, appPhysicalDir, page, query, output);
//Create your fake HttpContext instance 
HttpContext.Current = new HttpContext(workerRequest);

См. эту ссылку для деталей.

Так или иначе некоторые классы не имеют общедоступных конструкторов - думают о singleton-классе, например, конструктор является частным (и можно назвать статический getInstance метод, чтобы получить текущий экземпляр или создать его, если это является пустым).

Удачи

7
ответ дан 2 December 2019 в 03:49
поделиться

Одиночные элементы, например, не имеют конструкторов, или по крайней мере, никаких общедоступных конструкторов. Таким образом, если Ваш класс является одиночным элементом вместо записи

MyClass c = new MyClass();

Вы записали бы вместо этого

MyClass c = MyClass.getInstance();
3
ответ дан 2 December 2019 в 03:49
поделиться

У Вас есть 3 вопроса там...

HttpContext; это на самом деле имеет двух общедоступных конструкторов - но в действительности Вы, как ожидают, не будете использовать их. В более общих чертах можно использовать конструкторов не по умолчанию как так: MyType foo = new MyType("abc");.

Пропавший конструктор Довольно хорошо уже покрыл, но нет: abstract / static являются самыми простыми, но также не необходимо иметь общедоступного конструктора.

ToBoolean Behing сцены, это сделает моральный эквивалент bool.Parse("Hello"), который просто проверяет на известные строки - в особенности "Верный" и "Ложный" (использование OrdinalIgnoreCase, имея дело с пустым указателем/обрезкой/и т.д.).

3
ответ дан 2 December 2019 в 03:49
поделиться
1
ответ дан 2 December 2019 в 03:49
поделиться

Я полагаю, что конструктор HttpContext был отмечен частный. Это означает, что Вы не можете инстанцировать его сами. Платформа .NET создает один для Вас негласно...

1
ответ дан 2 December 2019 в 03:49
поделиться

Одним словом: статичный.

Иначе класс можно было бы инстанцировать внутренне или конфиденциально (Фабрика или Singleton)

Signleton:

Class A{
public static readonly A Instance = new A();

private A()
{
}

}
1
ответ дан 2 December 2019 в 03:49
поделиться

При создании конструктора частным Вы не можете extarnaly instatiate класс. Но в классе это возможно. Таким образом, можно обеспечить статический метод, который возвращает экземпляр класса. Шаблон "одиночка" основан на этом.

0
ответ дан 2 December 2019 в 03:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: