Обычно плохая практика иметь импорт внутри класса, но использование функций класса для этого будет выглядеть так:
class Deck:
random = __import__('random')
def __init__(self,choice,card = 0):
self.choice = choice
self.card = card
def deck(self):
if self.choice == 1:
print((self.random.randint(1,5)))
x = Deck(choice = 1)
x.deck()
Я провел обширное исследование на этом и нашел, что не возможно сериализировать константы перечисления через веб-сервис. Обратите внимание, что для выполнения цели Вам не нужны перечисления Ни один или Полный. Эти два перечисления могут подразумеваться с чтением / комбинация записи:
Вы могли принять полный доступ если Ваш AccessLevels = Read | Запись и ни один если Ваш AccessLevels = 0 [ничто]
Ваши перечисления были бы похожи на это:
[Serializable,Flags]
public enum AccessLevels
{
Read = 1,
Write = 2
}
Флаги должны быть кратными числами два, и в Вашем случае Ваши флаги (0,1,2,3). Попробуйте изменяют Ваше определение структуры к:
[Serializable,Flags]
public enum AccessLevels{
None = 1,
Read = 2,
Write = 4,
Full = Read | Write}
И посмотрите, работает ли это лучше.
(Я надеюсь, что не выставляю себя дураком, ее последнее, и я на пути к кровати..)
Одна опция состояла бы в том, чтобы обеспечить более подробный класс вместо перечисления, например.
[Serializable]
public class AccessPermission{
public boolean None{get;set;}
public boolean Read{get;set;}
public boolean Write{get;set;}
public boolean Full{get;set;}
public AccessPermission(AccessLevels level){
None = false;
Read = false;
Write = false;
Full = false;
switch(level){
case AccessLevels.None:
break;
case AccessLevels.Read:
Read = true;
break;
case AccessLevels.Write:
Write = true;
break;
case AccessLevels.Full:
Read = true;
Write = true;
Full = true;
break;
}
}
}
Другая опция, которую я вижу, предоставляет метод в том, что когда-либо язык они используют для успешного взаимодействия целого числа, которое Вы отправляете. Оператор флага означает, что c# делает побитовое маскирование, чтобы найти, отмечен ли отдельный флаг
0001 -> None 0010 -> Read 0100 -> Write 0110 -> Full
таким образом для проверки на любое разрешение необходимо видеть, установлен ли тот бит
public static boolean CanRead(int accessLevel){
return (accessLevel | 2) > 0 // return true if read bit set, using bitwise or
}
public static boolean CanWrite(int accessLevel){
return (accessLevel | 4) > 0 // return true of write bit set.
}
Обратите внимание, что это второе решение более хрупко при изменении определения accessLevels Вы, клиент будет тихо отсутствовать, ведут себя.
Я имел подобную проблему и обошел ее путем добавления другого веб-сервиса для возврата currect флаговых значений сначала.
Они затем стали значениями, которые я использовал в сравнивании.
Не могло бы быть самое чистое решение, но оно работает.
Править:
Мой исходный ответ предположил, что значения передаются через как отдельный веб-сервис, а не в перечислении.
Однако вводя по абсолютному адресу вокруг, кажется, что перечисление 0,1,2 отображаемый на 1,2,4 через веб-сервис (даже, что [Флаги] атрибут установлен) является типичной проблемой.
Решение, предложенное многими людьми, состоит в том, чтобы изменить исходное определение перечисления и запуститься от 1, а не 0.