仅更改 Python 类中一个对象的 self 属性

发布于 2025-01-11 15:07:25 字数 448 浏览 0 评论 0原文

我陷入了Python中的一个问题......(我是一个绝对的初学者,但我需要做一些 环境科学模型..) 所以问题是我有:

 class C:
     def __init__(self, x, y, z):

         self.x = x
         self.y = self.x * 8
         self.z = self.y * 9 + 0.5
         self.w = self.z +2

 one = C(5,8,12)
 two = C(2,12,12)
 three = C(1,2,3)

所以...我想更改 self.z 但仅限于对象三 (我希望它是 self.z = 12 * self.x );

我必须在 self.w 中调用它,所以我无法在我的实例之后修改它......

你对初学者有什么建议吗? 非常感谢您,祝您有愉快的一天!

I'm stuck on a problem in Python... (i'm an absolute beginner but i need to do a little
environmental science model..)
so the problem is I have:

 class C:
     def __init__(self, x, y, z):

         self.x = x
         self.y = self.x * 8
         self.z = self.y * 9 + 0.5
         self.w = self.z +2

 one = C(5,8,12)
 two = C(2,12,12)
 three = C(1,2,3)

So... i want to change the self.z but only for the object three
(i want it to be self.z = 12 * self.x );

I have to call it in self.w so i can't modify it after my istances...

do you have any suggestion to a beginner?
Thank you so much and have a nice day!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦初启 2025-01-18 15:07:26

一些笔记。首先,您实际上并没有使用在 __init__(self, x, y, z) 中传递的 yz 参数。

为了允许动态重载,您可能需要将各个分配分解为它们自己的方法,以便更容易更改您想要的行为。

您可以在下面传入一个自定义函数,该函数将在计算 z 时应用于 x 值。

class C:
    def __init__(self, x, custum_fn_z=None):
        self.x = x
        self.y = self.calc_y()
        self.z = self.calc_z(custum_fn_z)
        self.w = self.calc_w()

    def calc_y(self):
        return self.x * 8

    def calc_z(self, custom_fn_z=None):
        if custom_fn_z:
            return custom_fn_z(self.x)
        return self.y * 9 + 0.5

    def calc_w(self):
        return self.z +2

使用它:

one = C(5)
two = C(2)
three = C(1, lambda x: 12*x)

A few notes. First you are not actually using the arguments of y or z that are passed in __init__(self, x, y, z).

To allow on the fly overloading, you may want to break out the individual assignments into their own methods so it is easier to change the behavior you want.

Below you can pass in a custom function that will be applied to the x value when calculating z.

class C:
    def __init__(self, x, custum_fn_z=None):
        self.x = x
        self.y = self.calc_y()
        self.z = self.calc_z(custum_fn_z)
        self.w = self.calc_w()

    def calc_y(self):
        return self.x * 8

    def calc_z(self, custom_fn_z=None):
        if custom_fn_z:
            return custom_fn_z(self.x)
        return self.y * 9 + 0.5

    def calc_w(self):
        return self.z +2

to use it:

one = C(5)
two = C(2)
three = C(1, lambda x: 12*x)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文