如何返回要用作参数的类的名称

Posted

技术标签:

【中文标题】如何返回要用作参数的类的名称【英文标题】:How to return the name of a class to be used as an argument 【发布时间】:2018-02-05 07:48:49 【问题描述】:

我对编程有点陌生,并不真正知道如何寻找这个特定问题的答案,所以我想我会分享一个例子来表达我的观点。我目前正在编写一个脚本,它将我的类(命名为申请人)的一个实例添加到其他地方的 mongo 数据库中。我的问题是,在我的许多方法中,我需要从函数返回类的名称,以便返回的值可以用作另一个调用中的参数。这是一个例子

modelName = get_class().getModelName()

在上面的代码中,我试图检索有问题的特定数据模型的名称。我的想法是编写两种方法,一种用于返回可以找到模型名称的类的名称,另一种用于返回实际的模型名称。这是在一个抽象类中完成的,这样我的子类的功能可以被概括(否则我会直接放模型名和类名)。我不确定的是如何编写一个方法,该方法将以与上述用途兼容的格式返回类的名称。例如,如果我在一个名为 Rushee 的类中编写该方法,那么它应该能够以 rushee.getModelName() 可以工作的方式返回一个“rushee”。

任何想法都会非常有帮助。谢谢!

【问题讨论】:

【参考方案1】:
class Rushee:
    def get_model_name(self):
        return "return something"


class Other:
    def __init__(self):
        self.rushee = Rushee()

    def class_name(self):
        return self.rushee.__class__.__name__


if __name__ == "__main__":
    other = Other()
    other.class_name()

【讨论】:

【参考方案2】:

在类层次结构中:

class A():
    def get_class_name(self):
        return self.__class__.__name__

class B(A):
    pass

b = B()

print(b.get_class_name())

输出:

B

【讨论】:

【参考方案3】:

这是一种方法

class Grid:
    pass

g = Grid()
type(g).__name__

这类似于 COLDSPEED 之前发布的内容:

g.__class__.__name__

【讨论】:

【参考方案4】:

IIUC,您可以使用对象的__class__ 属性来获取它作为实例的类的名称。

In [60]: class Foo():
    ...:     pass
    ...:     
    ...:     

In [61]: x.__class__
Out[61]: __main__.Foo

这将返回完全限定名称(包括对象所属的命名空间),因此要仅获取最后一部分,您可以使用x.__class__.__name__

【讨论】:

【参考方案5】:

要获取类的名称,您可以使用此代码

class SomeClass():
    def getName(self):
        return self.__class__.__name__

【讨论】:

以上是关于如何返回要用作参数的类的名称的主要内容,如果未能解决你的问题,请参考以下文章

如何初始化用作函数参数的类类型

谓词函数函数对象

抽象类指针

static

选择题:JAVA的类和对象

Python为啥要self