элементы Словаря Доступа как атрибуты (свойства). таким образом, если a1=AttrDict () имеет ключевое 'имя'-> вместо a1 ['имя'] мы можем легко получить доступ к атрибуту имени использования a1-> <час> a1.name
class AttrDict(dict):
def __getattr__(self, name):
if name in self:
return self[name]
raise AttributeError('%s not found' % name)
def __setattr__(self, name, value):
self[name] = value
def __delattr__(self, name):
del self[name]
person = AttrDict({'name': 'John Doe', 'age': 66})
print person['name']
print person.name
person.name = 'Frodo G'
print person.name
del person.age
print person
Это просто означает, что если вы сделаете Filter-> a, вы получите 1. Filter-> b равно 2.
Странная шестнадцатеричная запись - это всего лишь запись.
EDIT : Поскольку это «фильтр», шестнадцатеричная запись имеет немного больше смысла.
Записывая 0x1, вы указываете следующий битовый шаблон:
0000 0001
А 0x2 - это:
0000 0010
Это проясняет, как использовать фильтр. .
Так, например, если вы хотите отфильтровать данные, у которых установлены младшие 2 бита, вы можете сделать:
Filter->a | Filter->b
, что будет соответствовать:
0000 0011
Шестнадцатеричная запись делает концепцию фильтра более понятной (для некоторые люди). Например, относительно легко вычислить двоичный код 0x83F0, посмотрев на него, но гораздо сложнее для 33776 (то же число в базе 10).
Это означает, что это целые числа, присвоенные этим именам. Перечисления - это просто именованные числа. Вы можете выполнять приведение между базовым типом перечисления и значением перечисления.
Например:
public enum Colour
{
Red = 1,
Blue = 2,
Green = 3
}
Colour green = (Colour) 3;
int three = (int) Colour.Green;
По умолчанию базовым типом перечисления является int
, но вы можете использовать любой из byte
, sbyte
, short
, ushort
, int
, uint
, long
или ulong
:
public enum BigEnum : long
{
BigValue = 0x5000000000 // Couldn't fit this in an int
}
Непонятно, что именно вы находите неясным, поэтому давайте обсудим все это:
Значениям перечисления были даны явные числовые значения. Каждое значение перечисления всегда представлено как числовое значение для базового хранилища, но если вы хотите быть уверенным, что это за числовое значение, вы должны указать его.
Числа записываются в шестнадцатеричной системе счисления, это часто используется, когда вы хотите, чтобы числовые значения содержали один установленный бит для маскировки. Легче увидеть, что значение имеет только один установленный бит, когда оно записано как 0x8000, чем когда оно записано как 32768.
В вашем примере это не так очевидно, поскольку у вас есть только два значения, но для битовой фильтрации каждое значение представляет собой одно bit так, чтобы каждое значение было вдвое больше предыдущего:
public enum Filter {
First = 0x0001,
Second = 0x0002,
Third = 0x0004,
Fourth = 0x0008
}
Вы можете использовать такое перечисление для фильтрации отдельных битов в значении:
If ((num & Filter.First) != 0 && (num & Filter.Third) != 0) {
Console.WriteLine("First and third bits are set.");
}
Это могло означать что угодно. Нам нужно увидеть больше кода, чтобы понять, что он делает.
0x001
- это число 1
. Каждый раз, когда вы видите 0x
, это означает, что программист ввел число в шестнадцатеричном формате.
Похоже, это какие-то битовые маски. Но их фактические значения - 1 и 2 ...
Вы можете присвоить значения перечислениям, например:
enum Example {
a = 10,
b = 23,
c = 0x00FF
}
и т.д. ...
Использование шестнадцатеричной системы счисления обычно указывает на то, что возможны некоторые манипуляции с битами. Я часто использовал эту нотацию, когда имел дело именно с этим, по той самой причине, по которой вы задали этот вопрос - эта нотация как бы выскакивает у вас и говорит: «Обратите внимание на меня, я важен!»
Что ж, мы можем использовать целые числа, на самом деле, мы можем избежать любого, поскольку природа enum по умолчанию присваивает 0 его первому члену и увеличиваемое значение следующему доступному члену. Многие разработчики используют это, чтобы поразить две цели одним луком.
Я считаю, если мы все еще используем, почему мы находятся на языке четвертого поколения, просто перейдите к двоичному снова
, но это гораздо лучший метод игры с битами и процессом шифрования / дешифрования