在类中使用实例方法时,是否有一种"正确"的方法来调用帮助器函数?函数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相关问答推荐

查找3D数组中沿一个轴的相同值序列的长度(与行程长度编码相关)

单击cookie按钮,但结果不一致

PyTorch卷积自动编码器,输出维度与输入不同

Python中两个矩阵的自定义Hadamard风格产物

Flask主机持续 bootstrap 本地IP| Python

自定义新元未更新参数

已删除的构造函数调用另一个构造函数

这家einsum运营在做什么?E = NP.einsum(aj,kl-il,A,B)

如何在PIL、Python中对图像应用彩色面膜?

如何使用Python中的clinicalTrials.gov API获取完整结果?

将jit与numpy linSpace函数一起使用时出错

如何在Windows上用Python提取名称中带有逗号的文件?

为什么符号没有按顺序添加?

将tdqm与cx.Oracle查询集成

在含噪声的3D点网格中识别4连通点模式

mypy无法推断类型参数.List和Iterable的区别

在单次扫描中创建列表

Polars将相同的自定义函数应用于组中的多个列,

在pandas/python中计数嵌套类别

OpenGL仅渲染第二个三角形,第一个三角形不可见