Какой вариант использования? Класс Typescript только с статическими членами против объекта со свойствами

Используя пространство имен верхнего уровня, это невозможно. Когда вы запускаете

`var = 1`

, он сохраняет ключ var и значение 1 в глобальном словаре. Это примерно эквивалентно вызову globals().__setitem__('var', 1). Проблема в том, что вы не можете заменить глобальный словарь в запущенном скрипте (вы, вероятно, можете, возившись со стеком, но это не очень хорошая идея). Однако вы можете выполнять код во вторичном пространстве имен и предоставлять собственный словарь для своих глобальных переменных.

class myglobals(dict):
    def __setitem__(self, key, value):
        if key=='val':
            raise TypeError()
        dict.__setitem__(self, key, value)

myg = myglobals()
dict.__setitem__(myg, 'val', 'protected')

import code
code.InteractiveConsole(locals=myg).interact()

Это запустит REPL, который почти работает нормально, но отказывается от любых попыток установить переменную val. Вы также можете использовать execfile(filename, myg). Обратите внимание, что это не защищает от вредоносного кода.

0
задан dashmug 6 March 2019 в 02:41
поделиться

1 ответ

Предполагая, что Utils никогда не предназначен для создания экземпляров (это будет просто набор методов), есть ли причина использовать один или другой?

Его различные способы создания того же самого. Есть и другие. Поскольку его не нужно создавать, я бы сделал простую версию const Utils.

Другие способы

, например. namespace

namespace Utils {
    export function doSomething() {
        return 'something'
    }

    export function doAnother() {
        return 'another'
    }
}
0
ответ дан basarat 6 March 2019 в 02:41
поделиться
Другие вопросы по тегам:

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