python: переменная члена класса пустая или неопределенная - PullRequest
0 голосов
/ 23 апреля 2020

Я новичок в python и создаю класс, который имеет несколько переменных, но в моем методе процесса я хочу проверить, установлены ли несколько переменных-членов или нет. Точно так же как java скрипт не определен, или если я могу установить ноль. Я не хочу использовать значения по умолчанию: как я могу проверить ноль или неопределенный?

class MyClass:
  def __init__(self, name, city):
      self.name = name
      self.city = city

  def setState(self,state)
      self.state = state

  def process(self):
      print("Name:", name)
    # here i want check whether state is being  set or not. 
    # How can i do it. I tried  if self.state is None but getting 
    # exception AttributeError. 

Ответы [ 3 ]

1 голос
/ 23 апреля 2020

Вы можете использовать hasattr

if hasattr(self, 'state'):
    ...

или поймать AttributeError себя (что, собственно, и есть все, что hasattr делает):

try:
    x = self.state
except AttributeError:
    print("No state")
else:
    print(f"State is {x}")

Однако, гораздо лучше просто инициализировать атрибут в None в методе __init__.

def __init__(self, name, city):
    self.name = name
    self.city = city
    self.state = None

Тогда вы можете просто проверить значение self.state при необходимости.

if self.state is not None:
    ...

Кроме того, если вы не хотите выполнять какую-либо проверку значения state, просто предоставьте пользователю прямой доступ к self.state, а не используйте метод для установки значения.

x = MyClass("bob", "Townsville")
x.state = "Vermont"  # rather than x.setState("Vermont")
0 голосов
/ 23 апреля 2020

Спасибо, это сработало, но потребовался еще один шаг. Я устанавливаю состояние = Нет в конструкторе, а затем

class MyClass:
  def __init__(self, name, city):
      self.name = name
      self.city = city
      self.state = None

def process(self):
    print('Name:',name)
    if self.state is not None :
        print('State:': self.state)
0 голосов
/ 23 апреля 2020

Вы можете проверить, установлены ли переменные с помощью

def process(self):
    print('Name:',name)
    if self.state is not None :
        print('State:': self.state)

, если None - это способ python проверки, установлено ли что-то или нет

...