2014-11-19 3 views
1

Когда пользователь вводит адрес электронной почты, и программа читает электронную почту и отображать их в соответствии с критериями (например, [email protected]), как критерии:Python: TypeError: этот конструктор не принимает никаких аргументов

  • username является yeo.myy
  • domain является edu.co

Я знаю, что его что-то делать с "@".

это код

class Email: 
    def __int__(self,emailAddr): 
     self.emailAddr = emailAddr 


    def domain(self): 
     index = 0 
     for i in range(len(emailAddr)): 
      if emailAddr[i] == "@": 
       index = i 
      return self.emailAddr[index+1:] 

    def username(self): 
     index = 0 
     for i in range(len(emailAddr)): 
      if emailAddr[i] == "@" : 
       index = i 
      return self.emailAddr[:index] 

def main(): 

    emailAddr = raw_input("Enter your email>>") 

    user = Email(emailAddr) 

    print "Username = ", user.username() 
    print "Domain = ", user.domain() 

main() 

это ошибка я получил:

Traceback (most recent call last): 
    File "C:/Users/Owner/Desktop/sdsd", line 29, in <module> 
    main() 
    File "C:/Users/Owner/Desktop/sdsd", line 24, in main 
    user = Email(emailAddr) 
TypeError: this constructor takes no arguments 
+3

похоже, что у вас есть опечатка в вашем определении функции 'init'! попробуйте изменить 'int' на' init'. – Dataman

ответ

6
def __int__(self,emailAddr): 

вы имели в виду __init__?

def __init__(self,emailAddr): 

Вы также не хватает на пару self с в своих методах, и ваши return s неправильно отступом.

def domain(self): 
    index = 0 
    for i in range(len(self.emailAddr)): 
     if self.emailAddr[i] == "@": 
      index = i 
      return self.emailAddr[index+1:] 

def username(self): 
    index = 0 
    for i in range(len(self.emailAddr)): 
     if self.emailAddr[i] == "@" : 
      index = i 
      return self.emailAddr[:index] 

Результат:

Username = yeo.myy 
Domain = edu.co 

Кстати, я рекомендую partition и rpartition для разбиения строки на две части на данном сепараторе. Конечно, биты отслеживают индексы вручную.

def domain(self): 
    return self.emailAddr.rpartition("@")[2] 
def username(self): 
    return self.emailAddr.rpartition("@")[0] 
+0

поблагодарить u soo много за вашу помощь – smuggyiz

Смежные вопросы