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))
Переопределите их как Michael Suggests выше и препятствовать тому, чтобы люди использовали переопределенный (SP?) методы, отметьте их как устаревших:
[Obsolete("These are not supported in this class.", true)]
public override void dontcallmeanymore()
{
}
, Если второй parm имеет значение true, ошибка компилятора будет сгенерирована, если кто-либо попытается назвать тот метод, и строка в первом parm является сообщением. Если parm2 будет ложью, то только предупреждение компилятора будет сгенерировано.
В то время как Вы не можете предотвратить использование тех наследованных участников к моему знанию, необходимо быть в состоянии скрыть их от IntelliSense с помощью EditorBrowsableAttribute:
Using System.ComponentModel;
[EditorBrowsable(EditorBrowsableState.Never)]
private string MyHiddenString = "Muahahahahahahahaha";
Редактирование: Просто видел это в комментариях для документации, которое делает его довольно бесполезным с этой целью:
существует видное примечание, которое указывает, что этот атрибут "не подавляет участников от класса в том же блоке". Это верно, но не завершено. На самом деле атрибут не подавляет участников от класса в том же решении.
Одна потенциальная вещь, которую можно сделать, содержат объект, а не расширяются от другого класса. Это даст Вам наибольшую гибкость с точки зрения представления, что Вы хотите представить, но если Вам абсолютно нужен объект иметь тот тип, это не идеальное решение (однако, Вы могли представить объект от метода 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;
}
}
}
Я думаю, что Вы являетесь лучшими, наименьшее количество hackish пути состоит в том, чтобы рассмотреть состав в противоположность наследованию.
Или, Вы могли создать интерфейс, который имеет участников, Вы хотите, имеете свою реализацию производного класса, которые взаимодействуют через интерфейс, и программа против интерфейса.