Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 方法打印类实例的名称_Python_Python 3.x - Fatal编程技术网

Python 方法打印类实例的名称

Python 方法打印类实例的名称,python,python-3.x,Python,Python 3.x,我是新手,写一个类来执行跟踪和计时任务。已经查看了功能的一个方面,但仍无法使其正常工作 下面是我要演示问题的部分: class seperate_trackers(): def __init__(self): print ("class initiated") def print_instance_name(self): print (self.__class__.__name__) 创建它的一个实例: track_task1 = sepa

我是新手,写一个类来执行跟踪和计时任务。已经查看了功能的一个方面,但仍无法使其正常工作

下面是我要演示问题的部分:

class seperate_trackers():

    def __init__(self): 
        print ("class initiated")

    def print_instance_name(self):
        print (self.__class__.__name__)
创建它的一个实例:

track_task1 = separate_trackers()
>> class initiated
在其中运行方法:

track_task1.print_instance_name()
>> separate_trackers
那不是我想要的


如何修复该方法,使其在运行时返回track_task1?

这不是一个好主意。如果希望实例具有名称,则该名称应为实例本身的属性变量的名称只是一个指针,不应表示对象的状态

请尝试以下方法:

# We don't usually use snake case for class names in python (and its 'separate')
class SeparateTrackers():

    def __init__(self, name): 
        self.name = name


instance1 = SeparateTrackers("instance_name")

print(instance1.name) # instance_name

这不是一个好主意。如果希望实例具有名称,则该名称应为实例本身的属性变量的名称只是一个指针,不应表示对象的状态

请尝试以下方法:

# We don't usually use snake case for class names in python (and its 'separate')
class SeparateTrackers():

    def __init__(self, name): 
        self.name = name


instance1 = SeparateTrackers("instance_name")

print(instance1.name) # instance_name

对象不知道引用它们的变量是什么。一个对象可以有任意数量的引用,但没有一个是真实的引用,它们作为对象的名称都同样有效。此外,可能没有简单名称的引用:

things = [1, "hello", separate_trackers(), 3.14]

没有有用的方法来找出哪些变量引用对象。

对象不知道哪些变量引用它们。一个对象可以有任意数量的引用,但没有一个是真实的引用,它们作为对象的名称都同样有效。此外,可能没有简单名称的引用:

things = [1, "hello", separate_trackers(), 3.14]
class SeparateTrackers:
  def __init__(self, instance_name):
    self.instance_name = instance_name

  def __str__(self):
    return self.instance_name
没有有用的方法来找出哪些变量引用对象

class SeparateTrackers:
  def __init__(self, instance_name):
    self.instance_name = instance_name

  def __str__(self):
    return self.instance_name
所以你可以用

a = SeparateTracker("first instance")
print(a) # print instance's name
所以你可以用

a = SeparateTracker("first instance")
print(a) # print instance's name

那么track\u task1=track\u task2=separate\u trackers应该打印什么呢?那将是非常糟糕的设计。此外,可能有多个变量分配给同一个对象。@cardamom我不是说你会。我只是想说明类/实例对赋值是盲目的。@cardamom:但它不是这样工作的:一种好的编程语言旨在促进好的设计,并且应该旨在使不好的设计接近不可能。变量名实际上是标识符。一个好的程序通常不关心使用的特定名称。只有在像kwargs这样的情况下,这样做才是好的。给出一个更亲切的回答:它不起作用,也不应该起作用。在整个程序中,可能有数千个变量、列表、指令引用同一个对象——管理所有这些将是一场噩梦。就目前的方式而言,它们也只是一种方式——变量指向对象,但对象本身与变量没有连接。所以:不,但是不要。最好使用类的名称初始化该类。事实上,这种设计在很多软件包中都有。那么track\u task1=track\u task2=separate\u trackers应该打印什么呢?那将是非常糟糕的设计。此外,可能有多个变量分配给同一个对象。@cardamom我不是说你会。我只是想说明类/实例对赋值是盲目的。@cardamom:但它不是这样工作的:一种好的编程语言旨在促进好的设计,并且应该旨在使不好的设计接近不可能。变量名实际上是标识符。一个好的程序通常不关心使用的特定名称。只有在像kwargs这样的情况下,这样做才是好的。给出一个更亲切的回答:它不起作用,也不应该起作用。在整个程序中,可能有数千个变量、列表、指令引用同一个对象——管理所有这些将是一场噩梦。就目前的方式而言,它们也只是一种方式——变量指向对象,但对象本身与变量没有连接。所以:不,但是不要。最好使用类的名称初始化该类。这种设计实际上存在于许多包中。谢谢,基本上就是这样,但是如何像我一样将print语句放入类中的函数print_instance_名称中呢?我一直在尝试,但还没有成功。感谢PEP 8提示,顺便说一句,这是我们需要知道的其他一些东西。只需将此方法添加到类:def print_instance_nameself:printself.name即可!谢谢我尝试过类似的方法,但使用self,name作为print函数的参数,该函数生成了一个错误TypeError:print\u instance\u name缺少一个必需的位置参数:“name”,总之,一旦你回到self,它就可以工作了。谢谢,基本上就是这样,但是如何像我一样将print语句放入类中的函数print_instance_name中呢?我一直在尝试,但还没有成功。感谢PEP 8提示,顺便说一句,这是我们需要知道的其他一些东西。只需将此方法添加到类:def print_instance_nameself:printself.name即可!谢谢我尝试了类似的方法,但使用self,name作为生成错误TypeError的打印函数的参数: print_instance_name缺少1个必需的位置参数:“name”,不管怎样,只要返回到刚才的self,它就可以工作了。