有没有一种简单的方法将所有python方法attributes设置为“self.”?

2024-06-06 01:36:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个函数,它在类对象中定义了许多参数,例如:

class Project:
    def newTask(self, taskName=None, taskDuration=None):
        self.taskName=taskName
        self.taskDuration=taskDuration

是否有一种“自然”的方式将方法的所有(或部分)参数设置为同名的self.属性?你知道吗


推而广之,传递Task对象Project是否也可以self.任务的方法?你知道吗

class Task:        
    def populate(self, taskName=None, taskDuration=None):
        self.taskName=taskName
        self.taskDuration=taskDuration

t=Task()
t.populate(taskName='Task1',taskDuration=100)

class Project:
    def newTask(self, t):
        self.taskName=t.taskName
        self.taskDuration=t.taskDuration
        self.populate

Tags: 对象方法函数selfprojectnonetask参数
2条回答

下面使用内置的^{}

def newTask(self, **kwargs):
    for name, vaue in kwargs.items():
        setattr(self, name, value)

您可能需要添加验证,以确定您想要的所有kwarg是否都在那里。你知道吗

总是有:

for arg in ('taskName', 'taskDuration'):
    setattr(self, arg, locals()[arg])

但对于可读性和自动静态代码分析来说,这是一个糟糕的想法。无论是我,还是电脑,都不能很快弄清楚taskName的用法。你知道吗

如果你有属于一起的东西,而且经常被传来传去,也许你应该试试namedtuple?它为您保存了一些样板代码,默认情况下具有不变性,您可以将其作为一个对象而不是多个对象传递。你知道吗

用法如下:

from collections import namedtuple

Task = namedtuple('Task', ['name', 'duration'])

class Project:
    def addTask(self, task):
        self.tasks.append(task)

t = Task('some name', 10)
project.addTask(t)

相关问题 更多 >