python如何查看对象s的身份_如何获取Python对象父对象?

(我知道这是一个老问题,但既然没有答案……)

你可以试着搞乱garbage collector。我们打算建议查看模块级对象,但是一些快速的代码实验给出了这个建议:尝试^{}函数。import gc

class Foo(object):

"""contains Bar"""

def __init__(self, val):

self.val = val

self.bar = None

class Bar(object):

"""wants to find its parents"""

def __init__(self, something):

self.spam = something

def find_parents(self):

return gc.get_referrers(self)

结果并不简单,因此您必须应用自己的逻辑来确定您要查找的是哪个f。注意下面的'f': <__main__.foo object at ...>:>>> f = Foo(4)

>>> b = Bar('ham')

>>> f.bar = b

>>> b.find_parents()

[{'bar': <__main__.bar object at>, 'val': 4}, ,

{'b': <__main__.bar object at>,

'Bar': ,

'f': <__main__.foo object at>, #

# the droids you're looking for

'__builtins__': ,

'__package__': None, 'gc': , '__name__': '__main__',

'Foo': , '__doc__': None

}]

对于加分,使用^{}来检查列表中是否有相同的b。

一些注意事项:我认为您应该只将父Foo对象传递给Bar,要么在init中,要么在另一个方法中。这就是我要做的,而不是我上面的建议。

This SO answer指出了垃圾收集器在双向链接时存在的一些问题-您目前没有这样做,但如果这样做了,仅供参考。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 Python 中,对象是指存储在内存中的实际数据。它可以是一个数字、字符串、列表、字典或其他数据类型。 值是指对象的具体内容。例如,如果一个对象是字符串类型,那么它的值就是字符串本身。 实例是指具体的对象。例如,如果你创建了一个字符串 "Hello, World!",那么 "Hello, World!" 就是一个字符串类型的实例。 身份是指对象在内存中的地址。每个对象都有一个唯一的身份,可以使用内置函数 id() 来获取对象身份。 例如,我们可以使用以下代码来演示这些概念: ``` # 定义一个字符串对象 s = "Hello, World!" # 打印字符串的值 print(s) # 打印字符串的类型 print(type(s)) # 打印字符串的身份 print(id(s)) ``` 输出结果如下: ``` Hello, World! <class 'str'> 140707673088880 ``` ### 回答2: 在Python中,对象(Object)是程序中的基本单元,可以是任何事物,包括数字、字符串、列表、函数等等。每个对象都有一些特定的属性和方法,可以通过操作这些属性和方法来改变对象的状态。 值(Value)是对象所包含的具体数据,是对象的实际内容。例如,一个整数对象的值可以是5,一个字符串对象的值可以是"Hello World"。 实例(Instance)是对象的一个特定实现或具体化。当我们创建一个对象时,我们实际上是创建了一个类的实例。例如,当我们用类定义了一个狗的模板后,我们可以通过创建一个具体的狗对象来实例化这个类,并赋予它具体的属性和方法。 身份(Identity)是对象的唯一标识符。在Python中,可以通过内建函数id()来获取一个对象的唯一标识符。每个对象都有一个独一无二的身份。即使两个对象的值相同,它们的身份也可能是不同的。 例如,下面是一个简单的Python代码示例,用于说明对象、值、实例和身份的概念: ``` class Dog: def __init__(self, name, age): self.name = name self.age = age dog1 = Dog("Max", 3) dog2 = Dog("Max", 3) print(id(dog1)) # 输出dog1的身份标识符 print(id(dog2)) # 输出dog2的身份标识符 print(dog1 == dog2) # 输出True,表示两个对象的值相同 print(dog1 is dog2) # 输出False,表示两个对象身份不同 ``` 以上代码中,我们定义了一个狗的类`Dog`,并创建了两个具体的狗对象`dog1`和`dog2`。尽管它们的值都是相同的,但是它们的身份是不同的,因为它们是两个不同的实例。这通过输出`True`和`False`来进行验证。 ### 回答3: 在Python中,对象(Object)是代码中的基本组成单元,是数据的抽象。每个对象都有一个身份、一个类型以及一些值。身份对象的唯一标识,是通过id()函数来获得的。值是对象所包含的数据,可以通过各种操作来读取和修改。类型是决定了对象可以进行哪些操作的特征,包括内置类型和用户自定义类型。 在Python中,使用赋值语句创建对象实例(Instance)。实例是属于某个类(Class)的特定对象,类似于面向对象编程中的对象。每个实例都是独立的,有自己的属性和方法。通过实例,可以访问和修改对象的属性,以及调用对象的方法。 下面是一个简单的Python代码示例: ```python # 定义一个类 class Person: def __init__(self, name, age): self.name = name self.age = age def say_hello(self): print("Hello, my name is", self.name) # 创建对象实例 person1 = Person("Alice", 25) person2 = Person("Bob", 30) # 访问实例的属性 print(person1.name) # 输出:Alice print(person2.age) # 输出:30 # 调用实例的方法 person1.say_hello() # 输出:Hello, my name is Alice person2.say_hello() # 输出:Hello, my name is Bob # 检查实例的身份 print(id(person1) == id(person2)) # 输出:False ``` 在上面的代码中,我们定义了一个名为Person的类,具有name和age两个属性以及say_hello()方法。然后,我们使用Person类创建了两个对象实例person1和person2。通过访问实例的属性和调用实例的方法,我们可以对对象进行操作。最后,我们通过比较对象实例的身份可以发现,它们是不同的对象

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值