Python:编写类时出错

Pet*_*rov 0 python class

我想编写func并将其添加到类中.我用

import pandas as pd
import tldextract

domain = []
df = pd.DataFrame()
df['urls'] = ['ru.vk.com', 'eng.facebook.com', 'ru.ya.ru']
urls = df.urls.values.tolist()
class csv:
    def get_domain(self, list_url, list, df):
        self.list_url = list_url
        self.list = list
        self.df = df
        for i, url in enumerate(list_url):
            get_domain = tldextract.extract(url)
            subdomain = get_domain[0] + '.' + get_domain[1] + '.' + get_domain[2]
            if subdomain.startswith('.'):
                subdomain = subdomain[1:]
            elif subdomain.endswith('.'):
                subdomain = subdomain[:-1]
            elif subdomain.startswith('www.'):
                subdomain = subdomain[4:]
            list.append(subdomain)
        df['subdomain'] = list

df = csv()
df.get_domain(urls, domain, df)
Run Code Online (Sandbox Code Playgroud)

我试图从网址获取域名,但我得到错误

AttributeError: csv instance has no attribute '__setitem__'
Run Code Online (Sandbox Code Playgroud)

我应该改变什么?

Uri*_*iel 5

您命名用于创建csv实例的变量df,与数据框项目相同,通过df引用csv对象而不是panda数据帧.然后,当您尝试调用时get domain,df引用该类,无法获取字符串索引,从而失败.


简而言之 - 更改最后2行中的变量名称,例如

csv_df = csv()
csv_df.get_domain(urls, domain, df)
Run Code Online (Sandbox Code Playgroud)

顺便说一句,这不是一个错误,但我很确定最后一行get_domain应该是

self.df['subdomain'] = self.list
Run Code Online (Sandbox Code Playgroud)

(对于函数中的所有变量也是如此,因为您希望更改类属性而不是给定变量).

并且您不应该命名变量list或任何其他保留关键字.可能会导致问题.