Почему должен конструкторы на абстрактных классах быть защищенным, не общедоступный?

Соответствует ли это вашему требованию? Это ничего не делает, кроме печати значения.

import tensorflow as tf
from tensorflow.python.framework import tensor_shape

some_data = [11,222,33,4,5,6,7,8]

def func( v ):
    print (some_data[v])
    return some_data[v]

with tf.Session() as sess:
    r = tf.while_loop(
        lambda i, v: i < 4,
        lambda i, v: [i + 1, tf.py_func(func, [i], [tf.int32])[0]],
        [tf.constant(0), tf.constant(2, tf.int32)],
        [tensor_shape.unknown_shape(), tensor_shape.unknown_shape()])

    r[1].eval()

Он печатает

11 4 222 33

Порядок меняется каждый раз, но я думаю, что tf.control_dependencies может быть полезно для управления этим .

45
задан Yuck 28 January 2015 в 17:26
поделиться

2 ответа

Просто потому, что публичность не имеет смысла в абстрактном классе. Абстрактный класс по определению не может быть создан непосредственно. Он может быть создан только экземпляром производного типа. Поэтому единственными типами, которые должны иметь доступ к конструктору, являются его производные типы и, следовательно, защищенный, имеет гораздо больший смысл, чем открытый.

78
ответ дан 26 November 2019 в 21:11
поделиться

Это хорошая практика OO.

public abstract class ExampleAbstractClass
{
    protected ExampleAbstractClass()
    {
      // :::
    }
}

Вы только хотите, чтобы наследующие дочерние классы имели доступ к конструктору. Единственный способ сделать это - сделать конструктор защищенным.
Имейте в виду, что когда вы добавляете параметры к этим конструкторам, это совершенно другое обсуждение.

-2
ответ дан 26 November 2019 в 21:11
поделиться
Другие вопросы по тегам:

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