如何将属性从一个对象传递到另一个对象以计算值
How to pass an attribute from an object to another to calculate a value
目标:根据另一个对象的属性和当前对象的属性的总和计算一个值,然后使用该值减去另一个值
预期输出:target_value = 5
问题:AttributeError:类型对象 'x' 没有属性 'attribute1'
对象 1:
class x():
def __init__(self, attribute1):
self.attribute1 = attribute1
对象 2:
from object_one import x
class y():
def __init__(self, attribute2):
self.attribute2 = attribute2
def calculate_attributes(self, target):
value = x.attribute1 + y.attribute2
target -= value
主要:
from object_one import x
from object_two import y
object_x = x(5)
object_y = y(10)
target_value = 20
object_y.calculate_attributes(target_value)
print(target_value)
直接解决您的问题
在对象 1 中,您正在声明 字段 属性 1。在 Object2 中,您正在导入 class X.
class X 没有名称属性 attribute1
- 只有 x
类型的对象有。您必须通过添加参数将对原始对象 x
的引用传递给 calculate_attributes(self, target)
方法,如下所示:
class y():
def __init__(self, attribute2):
self.attribute2 = attribute2
def calculate_attributes(self, target, x_obj):
value = x_obj.attribute1 + y.attribute2
target -= value
之后,您可以通过以下方式使用此 calculate_attributes 方法:
object_y.calculate_attributes(target_value, object_x)
更深入的解释 - 为什么会这样?
A class 基本上是 对象 的蓝图。在定义一个 class 之后,您可以通过 实例化 其类型的对象来使用它。
同线
object_x = x(5)
您正在制作 类型 x.
的对象
这个对象有它自己的字段 - 它是独立存在的,并且只是从它的 class 蓝图创建的(这里是:“type”,“blueprint”,“parent class" - 当我在这里说话时,所有的意思都是一样的)。
在__init__
方法中,当您将self.attribute2
设置为具有相同名称的参数时,您设置了该任意[=51]的一个字段 =]object 实例化的 class。这意味着两个 y
类型的对象可以有不同的值 attribute2
但是,您还可以 使 class 包含一个“字段”。这可以像下面这样完成:
class y():
who_made_this_class = "george"
def __init__(self, attribute2):
self.attribute2 = attribute2
这可以称为静态 class 变量。现在,当您实例化一个新的 y
对象时,您会看到如下所示的行为:
obj_one = y(15);
obj_two = y(2020);
print("Object ones attribute2 value is: " + str(obj_one.attribute2))
print("Object twos attribute2 value is: " + str(obj_two.attribute2))
print("Object ones who_made_this_class value is: " + str(obj_one.who_made_this_class))
print("Object twos who_made_this_class value is: " + str(obj_two.who_made_this_class))
预期输出为:
Object ones attribute2 value is: 15
Object twos attribute2 value is: 2020
Object ones who_made_this_class value is: george
Object twos who_made_this_class value is: george
目标:根据另一个对象的属性和当前对象的属性的总和计算一个值,然后使用该值减去另一个值
预期输出:target_value = 5
问题:AttributeError:类型对象 'x' 没有属性 'attribute1'
对象 1:
class x():
def __init__(self, attribute1):
self.attribute1 = attribute1
对象 2:
from object_one import x
class y():
def __init__(self, attribute2):
self.attribute2 = attribute2
def calculate_attributes(self, target):
value = x.attribute1 + y.attribute2
target -= value
主要:
from object_one import x
from object_two import y
object_x = x(5)
object_y = y(10)
target_value = 20
object_y.calculate_attributes(target_value)
print(target_value)
直接解决您的问题
在对象 1 中,您正在声明 字段 属性 1。在 Object2 中,您正在导入 class X.
class X 没有名称属性 attribute1
- 只有 x
类型的对象有。您必须通过添加参数将对原始对象 x
的引用传递给 calculate_attributes(self, target)
方法,如下所示:
class y():
def __init__(self, attribute2):
self.attribute2 = attribute2
def calculate_attributes(self, target, x_obj):
value = x_obj.attribute1 + y.attribute2
target -= value
之后,您可以通过以下方式使用此 calculate_attributes 方法:
object_y.calculate_attributes(target_value, object_x)
更深入的解释 - 为什么会这样?
A class 基本上是 对象 的蓝图。在定义一个 class 之后,您可以通过 实例化 其类型的对象来使用它。
同线
object_x = x(5)
您正在制作 类型 x.
的对象这个对象有它自己的字段 - 它是独立存在的,并且只是从它的 class 蓝图创建的(这里是:“type”,“blueprint”,“parent class" - 当我在这里说话时,所有的意思都是一样的)。
在__init__
方法中,当您将self.attribute2
设置为具有相同名称的参数时,您设置了该任意[=51]的一个字段 =]object 实例化的 class。这意味着两个 y
类型的对象可以有不同的值 attribute2
但是,您还可以 使 class 包含一个“字段”。这可以像下面这样完成:
class y():
who_made_this_class = "george"
def __init__(self, attribute2):
self.attribute2 = attribute2
这可以称为静态 class 变量。现在,当您实例化一个新的 y
对象时,您会看到如下所示的行为:
obj_one = y(15);
obj_two = y(2020);
print("Object ones attribute2 value is: " + str(obj_one.attribute2))
print("Object twos attribute2 value is: " + str(obj_two.attribute2))
print("Object ones who_made_this_class value is: " + str(obj_one.who_made_this_class))
print("Object twos who_made_this_class value is: " + str(obj_two.who_made_this_class))
预期输出为:
Object ones attribute2 value is: 15
Object twos attribute2 value is: 2020
Object ones who_made_this_class value is: george
Object twos who_made_this_class value is: george