如何使用python中的class函数创建临时对象?

2024-04-25 04:53:55 发布

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

我正在编写这段代码,需要将对象作为函数中的参数发送。我的问题是其中一个对象需要恢复其原始值,但我需要从函数返回一个对象

我不知道如何发送答案并将原始值保留在对象中 可安全重复使用。有没有办法从类声明本身生成对象

import math

class Points(object):
 def __init__(self, x, y, z):
    self.x = x
    self.y = y
    self.z = z


def __sub__(self, no):
    
    no.x = no.x - self.x
    no.y = no.y - self.y
    no.z = no.z - self.z
    
    return(no)

def dot(self, no):
    ans = (self.x * no.x)+(self.y * no.y)+(self.z * no.z)
    return ans

def cross(self, no):
    x = (self.y * no.z)-(self.z * no.y)
    y = (self.x * no.z)-(self.z * no.x)
    z = (self.x * no.y)-(self.y * no.x)
    self.x = x
    self.y = y
    self.z = z
    return(self)
    
def absolute(self):
    return pow((self.x ** 2 + self.y ** 2 + self.z ** 2), 0.5)

if __name__ == '__main__':
points = list()
for i in range(4):
    a = list(map(float, input().split()))
    points.append(a)

a, b, c, d = Points(*points[0]), Points(*points[1]), Points(*points[2]), Points(*points[3])
x = (b - a).cross(c - b)
y = (c - b).cross(d - c)
angle = math.acos(x.dot(y) / (x.absolute() * y.absolute()))

print("%.2f" % math.degrees(angle))

我想做一些类似的事情:

def function_name(self,other)
  temp.x = self.x + other.x
  temp.y = self.y + other.y
  return temp

这样,两个输入对象都将有其原始值,但我不知道如何获得该临时值


Tags: 对象函数noselfreturndefmathtemp
2条回答

如果您试图重用已传递给类对象的变量,则可以在__init__语句或使用它的函数中复制它

例如

class Foo:
  
  def __init__(self, my_var1, my_var2):
    self.my_var1 = my_var1
    self.my_var2 = my_var2

  def bar(self):
    bar_var1 = self.my_var1
    bar_var2 = self.my_var2
    bar_var1 = bar_var1 + bar_var2
    return bar_var1

尽管我对为什么要在cross函数中返回self感到有点困惑,因为self是一个类参数,而且您似乎没有在它的intended purpose.中使用它。如果您对应该如何使用self感到困惑,简要阅读一下python class tutorial可能会有所帮助。不过,除此之外,我希望这能回答你的问题

谢谢所有帮助过我的人。我找到了我想要的答案。我想要一个对象作为一个容器来存储类变量, 我不知道我可以从里面创建一个新的类对象

import math
class Points(object):
    def __init__(self, x, y, z):
        self.x=x
        self.y=y
        self.z=z

    def __sub__(self, no):
        return  Points((self.x-no.x),(self.y-no.y),(self.z-no.z))

    def dot(self, no):
        return (self.x*no.x)+(self.y*no.y)+(self.z*no.z)

    def cross(self, no):
        return Points((self.y*no.z-self.z*no.y),(self.z*no.x-self.x*no.z),(self.x*no.y-self.y*no.x))
        
    def absolute(self):
        return pow((self.x ** 2 + self.y ** 2 + self.z ** 2), 0.5)

正如您可以看到的,使用点,即类点的构造函数,我可以存储任何操作的结果,并可以将其作为对象返回,同时不改变输入对象

相关问题 更多 >