Skip to main content
 首页 » 编程设计

python :TypeError: this constructor takes no arguments

2025年05月04日14duanxz

当用户输入电子邮件地址时,程序读取电子邮件并根据其标准(例如 yeo.myy@edu.co)显示它,例如标准:

  • 用户名是yeo.myy
  • 域 是 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 

请您参考如下方法:

def __int__(self,emailAddr): 

你是说 __init__ 吗?

def __init__(self,emailAddr): 

您的方法中还缺少几个 self,并且您的 return 缩进不正确。

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]