Dataclasses - AttributeError: type object 'Arguments' has no attribute 'column_names'
Dataclasses - AttributeError: type object 'Arguments' has no attribute 'column_names'
我正在尝试使用数据类来创建可在函数中使用的字符串列表。尝试正常访问信息时出现属性错误,就像 my_int: Optional[int] = field(default=1000)
.
例如:
from typing import Optional, List
from dataclasses import dataclass, field
@dataclass
class Arguments:
"""
Configuration for data loader.
"""
column_names: Optional[list[str]] = field(
default_factory= lambda:['copies', 'path', 'repo_name', 'size', 'license', 'hash', 'line_mean', 'line_max', 'alpha_frac', 'autogenerated']
)
def build_dl(args: Arguments):
load_train_data = args.column_names
return load_train_data
build_dl(Arguments)
错误:
AttributeError: 类型对象 'Arguments' 没有属性 'column_names'
我正在尝试让 args.column_names
成为 ['copies', 'path', 'repo_name', 'size', 'license', 'hash', 'line_mean', 'line_max', 'alpha_frac', 'autogenerated']
我以前没有使用过数据类。任何帮助将不胜感激。
谢谢。
您似乎在尝试将 column_names
用作 class 变量,而不是数据 class 字段。也就是说,在您上面的情况下,您需要首先实例化 Arguments
的实例,例如 Arguments(column_names=...)
才能访问 column_names
属性。
所以澄清一下,在您的情况下,最快和最简单的解决方法是像这样更新调用:
build_dl(Arguments())
您可以用来解决此问题的另一种方法是使用文档中提到的 class variables,dataclasses
完全将其排除在外。另一种选择是完全删除像 list[str]
这样的注释,这也会达到相同的结果。
在下文中,我还将 args
的注释更新为 Type[Arguments]
,以表明我们正在传递实际类型(例如 Arguments
)而不是实例同类型
from typing import Type, ClassVar
from dataclasses import dataclass
@dataclass
class Arguments:
"""
Configuration for data loader.
"""
column_names: ClassVar[list[str]] = [
'copies', 'path', 'repo_name', 'size', 'license', 'hash', 'line_mean',
'line_max', 'alpha_frac', 'autogenerated'
]
def build_dl(args: Type[Arguments]):
load_train_data = args.column_names
return load_train_data
build_dl(Arguments)
我正在尝试使用数据类来创建可在函数中使用的字符串列表。尝试正常访问信息时出现属性错误,就像 my_int: Optional[int] = field(default=1000)
.
例如:
from typing import Optional, List
from dataclasses import dataclass, field
@dataclass
class Arguments:
"""
Configuration for data loader.
"""
column_names: Optional[list[str]] = field(
default_factory= lambda:['copies', 'path', 'repo_name', 'size', 'license', 'hash', 'line_mean', 'line_max', 'alpha_frac', 'autogenerated']
)
def build_dl(args: Arguments):
load_train_data = args.column_names
return load_train_data
build_dl(Arguments)
错误: AttributeError: 类型对象 'Arguments' 没有属性 'column_names'
我正在尝试让 args.column_names
成为 ['copies', 'path', 'repo_name', 'size', 'license', 'hash', 'line_mean', 'line_max', 'alpha_frac', 'autogenerated']
我以前没有使用过数据类。任何帮助将不胜感激。
谢谢。
您似乎在尝试将 column_names
用作 class 变量,而不是数据 class 字段。也就是说,在您上面的情况下,您需要首先实例化 Arguments
的实例,例如 Arguments(column_names=...)
才能访问 column_names
属性。
所以澄清一下,在您的情况下,最快和最简单的解决方法是像这样更新调用:
build_dl(Arguments())
您可以用来解决此问题的另一种方法是使用文档中提到的 class variables,dataclasses
完全将其排除在外。另一种选择是完全删除像 list[str]
这样的注释,这也会达到相同的结果。
在下文中,我还将 args
的注释更新为 Type[Arguments]
,以表明我们正在传递实际类型(例如 Arguments
)而不是实例同类型
from typing import Type, ClassVar
from dataclasses import dataclass
@dataclass
class Arguments:
"""
Configuration for data loader.
"""
column_names: ClassVar[list[str]] = [
'copies', 'path', 'repo_name', 'size', 'license', 'hash', 'line_mean',
'line_max', 'alpha_frac', 'autogenerated'
]
def build_dl(args: Type[Arguments]):
load_train_data = args.column_names
return load_train_data
build_dl(Arguments)