属性化对象能否访问其对象';python中的其他属性是什么?

属性化对象能否访问其对象';python中的其他属性是什么?,python,python-2.7,class,oop,object,Python,Python 2.7,Class,Oop,Object,我是python新手,如果这太糟糕,我会提前道歉 假设我动态地使一个对象成为另一个对象的属性。 指定为属性的对象是否可以访问指定给对象的其他属性的,而无需继承或作为参数传递 e、 g:- 我知道我可以将bill的健康作为损伤函数的参数:- class human: def __init__(self): self.health = 100 class fire: def __init__(self): self.fire = 10 def

我是python新手,如果这太糟糕,我会提前道歉

假设我动态地使一个对象成为另一个对象的属性。 指定为属性的对象是否可以访问指定给对象的其他属性的,而无需继承或作为参数传递

e、 g:-

我知道我可以将bill的健康作为损伤函数的参数:-

class human:
    def __init__(self):
        self.health = 100

class fire:
    def __init__(self):
        self.fire = 10
    def damage(self, obj):
        obj.health -= self.fire

bill = human()
bill.fired = fire()

print bill.health

bill.fired.damage(bill)   #now the fired object knows bill's health

print bill.health   #works fine
但有没有其他办法,或者这是一条死胡同?除了遗产。 (我使用的是PythonV2.7,当然我也想知道v3解决方案)

如果这个问题太糟糕或者已经得到回答,我再次道歉。
我试着读这本书,但我听不懂,太复杂了。如果我用谷歌搜索这个问题,结果只会导致“如何访问对象属性”,例如这个。这一个使用继承。

是的,您可以在创建
human
时将其传递到
fire
,因为它们似乎彼此链接:

class人类:
定义初始化(自):
自我健康=100
火警类别:
定义初始(自我,人类):
自燃=10
self.human=人
def损坏(自):
self.human.health-=self.fire
比尔=人
bill.fired=火灾(bill)
bill.fired.damage()#被激发的对象会损害bill对象的健康

我不确定您的目标是什么,但正如我所提到的,您的问题在我看来像是一种代码味道(表明有些地方不对劲)

假设您希望<代码>人类< /代码>实例着火(即创建<代码>火灾< /代码>实例),然后推断火灾损害其健康,考虑下面的重构:

class human:
    def __init__(self):
        self.health = 100
        self.fire = None

    def set_on_fire(self):
        self.fire = fire()

    def suffer_burn_damage(self):
        if self.fire is not None:
            self.health -= self.fire.damage

class fire:
    def __init__(self):
        self.damage = 10

bill = human()
print(bill.health)  # output: 100
bill.set_on_fire()
bill.suffer_burn_damage()
print(bill.health)  # output: 90
这样一来,您就不需要通过
fire
实例首先了解
人类的健康状况。人类
的“工作”是跟踪它是否被烧毁,以及何时推断它自己的损失


这在更抽象的意义上也是有意义的——这也是使用OOP的要点之一。现实生活中的火有一定的能量。一个人一旦着火,他的“健康”就可以从火的能量中推断出来。fire本身不需要了解人类的健康或其他任何相关信息。

因为这是Python,可能有一种(有点复杂的)方法可以做到这一点,但如果您当前的结构存在这种需要,您应该重新思考您的代码结构。我一直在尝试重新构造,但最终它是,要么是固定的函数,要么是复杂得模糊不清的类,要么是我使用字典或列表来存储某些数据的折衷方案。我不喜欢在类中使用字典或列表来处理某些数据,这样做可以吗?我不知道这是不是一个坏习惯。
class human:
    def __init__(self):
        self.health = 100
        self.fire = None

    def set_on_fire(self):
        self.fire = fire()

    def suffer_burn_damage(self):
        if self.fire is not None:
            self.health -= self.fire.damage

class fire:
    def __init__(self):
        self.damage = 10

bill = human()
print(bill.health)  # output: 100
bill.set_on_fire()
bill.suffer_burn_damage()
print(bill.health)  # output: 90