Сокрытие наследованных участников

import simplejson

class User(object):
    def __init__(self, name, mail):
        self.name = name
        self.mail = mail

    def _asdict(self):
        return self.__dict__

print(simplejson.dumps(User('alice', 'alice@mail.com')))

, если используется стандарт json, необходимо определить функцию default

import json
def default(o):
    return o._asdict()

print(json.dumps(User('alice', 'alice@mail.com'), default=default))
40
задан Hossein Narimani Rad 30 April 2015 в 10:33
поделиться

4 ответа

Переопределите их как Michael Suggests выше и препятствовать тому, чтобы люди использовали переопределенный (SP?) методы, отметьте их как устаревших:

[Obsolete("These are not supported in this class.", true)]
public override  void dontcallmeanymore()
{
}

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

35
ответ дан Community 27 November 2019 в 01:32
поделиться

В то время как Вы не можете предотвратить использование тех наследованных участников к моему знанию, необходимо быть в состоянии скрыть их от IntelliSense с помощью EditorBrowsableAttribute:

Using System.ComponentModel;

[EditorBrowsable(EditorBrowsableState.Never)]
private string MyHiddenString = "Muahahahahahahahaha";

Редактирование: Просто видел это в комментариях для документации, которое делает его довольно бесполезным с этой целью:

существует видное примечание, которое указывает, что этот атрибут "не подавляет участников от класса в том же блоке". Это верно, но не завершено. На самом деле атрибут не подавляет участников от класса в том же решении.

16
ответ дан Michael Stum 27 November 2019 в 01:32
поделиться

Одна потенциальная вещь, которую можно сделать, содержат объект, а не расширяются от другого класса. Это даст Вам наибольшую гибкость с точки зрения представления, что Вы хотите представить, но если Вам абсолютно нужен объект иметь тот тип, это не идеальное решение (однако, Вы могли представить объект от метода get).

Таким образом:

public class MyClass : BaseClass
{
    // Your stuff here
}

Становится:

public class MyClass
{
    private BaseClass baseClass;

    public void ExposeThisMethod()
    {
        baseClass.ExposeThisMethod();
    }
}

Или:

public class MyClass
{
    private BaseClass baseClass;

    public BaseClass BaseClass
    {
        get
        {
            return baseClass;
        }
    }
}
13
ответ дан Mike Stone 27 November 2019 в 01:32
поделиться

Я думаю, что Вы являетесь лучшими, наименьшее количество hackish пути состоит в том, чтобы рассмотреть состав в противоположность наследованию.

Или, Вы могли создать интерфейс, который имеет участников, Вы хотите, имеете свою реализацию производного класса, которые взаимодействуют через интерфейс, и программа против интерфейса.

8
ответ дан Karl Seguin 27 November 2019 в 01:32
поделиться
Другие вопросы по тегам:

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