打印对象名称,当对象调用类

时间:2017-07-28 08:48:25

标签: python

#!/usr/bin/env python  
class AA(object):
    def __init__(self):
        pass
    def y(self):
        pass

x=AA()
x.y()

当我执行x.y()时,我想打印“这是'x'给我打电话”,我应该怎么做?

4 个答案:

答案 0 :(得分:1)

我希望这能解决你的问题

#!/usr/bin/env python


class AA(object):
    def __init__(self):
        pass

    def y(self, name):
        self.name = name
        print("This is %s call me" % name)


x = AA()
x.y("Tarzan")

答案 1 :(得分:0)

一切都是Python中的一个对象,当你创建一个类的实例时,它会分配内存位置,并且你的x变量会引用内存位置。唯一的对象有内存位置,变量没有任何内存位置。变量只是指对象的内存位置

在您的示例中, X 不仅仅是对您的记忆位置的引用

如果定义变量

a = 2

表示 a 对2

的引用
a = 1

表示现在引用1

将一个变量分配给另一个变量会使新标签绑定到相同的值,如下所示。

b = a

表示 a和b 都引用1

python返回内存位置中的

id()

print id(a)
print id(b)

<强>输出

140621897573617
140621897573617

示例1

>>> s1 = 'hello'

>>> s2 = 'hello'

>>> id(s1), id(s2) 
(4454725888, 4454725888)

>>> s1 == s2 True

>>> s1 is s2 True

>>> s3 = 'hello, world!'

>>> s4 = 'hello, world!'

>>> id(s3), id(s4) (4454721608, 4454721664)

>>> s3 == s4 True

>>> s3 is s4 False

示例2

>>> class Foo:
...     pass
...
>>> bar = Foo()
>>> baz = Foo()
>>> id(bar)
140730612513248
>>> id(baz)
140730612513320

<强>结果

  

对象或实例的名称不仅仅是对内存的引用   位置

答案 2 :(得分:0)

来自@ user1334609的评论:

  

例如,我们有很多vm实例,vm1 = AA(),   vm1.run_cmd(“xxxx”),vm2 = AA(),vm2.run_cmd(“”)我想知道哪个vm   运行一些cmd

要知道哪个VM运行了该命令,您只需使用id(self),而不是尝试在代码中查找声明的变量。

您现在可以从哪个vm命令运行中看到两个选项。

选项1:将一个成员变量添加到class。这可以提供可读性。

选项2:使用idself的{​​{1}}。这可以避免添加额外的变量。

示例代码:

y()

这给出了以下输出:

#!/usr/bin/env python
class AA(object):
    def __init__(self, vmname):
        self.whoami = vmname

    def y(self):
        print "My Name is %s " % self.whoami # Option1
        print "My Id is %s " % id(self) # Option2


def main():
    vm1=AA("Yoda")
    vm1.y()
    vm2=AA("Boda")
    vm2.y()
    vm3=AA("Anakin")
    vm3.y()


if __name__ == '__main__':
    main()

答案 3 :(得分:0)

我在这里发布了一个完整的解决方案:

https://stackoverflow.com/a/49331683/7386061

它没有参数。例如,您可以这样做:

.nav--social__link.yt-button{
  height: 40px !important;
  overflow: visible;
  border-radius: 3px;
  width: 79px;
  margin-right: 4px;
}
.g-ytsubscribe{
  display: inline-block;
  vertical-align: middle !important;
  font-size: 1px;
  line-height: normal; font-size: 1px;
  text-indent: 0px; 
  padding: 0px; 
  background: transparent none repeat scroll 0% 0%; 
  border-style: none; 
}