在类中使用实例方法时,是否有一种"正确"的方法来调用帮助器函数?函数calc_agecalc_age_v2都可以工作,有没有更好的方法?这只是一个玩具示例,真正的代码有更复杂的功能.

#%%
def calc_age(self):
    age=2024-self.dob
    return(age)


def calc_age_v2(self):
    self.age=2024-self.dob
    return(self)


class Person:
    def __init__(self, name, dob,age):
        self.name = name
        self.dob = dob
        self.age=age

    def myfunc(self):
        print("Hello my name is " + self.name)

    def calc_age(self):
        self.age=calc_age(self)

    def calc_age_v2(self):
        self=calc_age_v2(self)

p1 = Person(name="John",dob=2002,age=None)
# p1.calc_age()
p1.calc_age_v2()

print(p1.age)

推荐答案

当您就地修改属性时,没有理由从calc_age_v2函数返回一些东西(并且我认为返回相同的类实例不是一个好主意).

# Use person instead of self for better understanding
def calc_age(person):
    return 2024 - person.dob

# Use person instead of self for better understanding
def calc_age_v2(person):
    person.age = 2024 - person.dob

class Person:
    def __init__(self, name, dob,age):
        self.name = name
        self.dob = dob
        self.age=age

    def myfunc(self):
        print("Hello my name is " + self.name)

    def calc_age(self):
        self.age=calc_age(self)

    def calc_age_v2(self):
        calc_age_v2(self)

如果您只能返回一个结果,我会使用您的第一个版本calc_age.

Python相关问答推荐

聚合具有重复元素的Python字典列表,并添加具有重复元素数量的新键

OR—Tools中CP—SAT求解器的IntVar设置值

cv2.matchTemplate函数匹配失败

joblib:无法从父目录的另一个子文件夹加载转储模型

try 检索blob名称列表时出现错误填充错误""

Matplotlib中的字体权重

交替字符串位置的正则表达式

Polars map_使用多处理对UDF进行批处理

如何在Python请求中组合多个适配器?

Python将一个列值分割成多个列,并保持其余列相同

合并相似列表

Python日志(log)库如何有效地获取lineno和funcName?

高效生成累积式三角矩阵

遍历列表列表,然后创建数据帧

我怎样才能让深度测试在OpenGL中使用Python和PyGame呢?

用LAKEF划分实木地板AWS Wrangler

基于2级列表的Pandas 切片3级多索引

如何在networkx图中提取和绘制直接邻居(以及邻居的邻居)?

GEKKO中若干参数的线性插值动态优化

保存由PYTHON在EXCEL中所做更改的问题