关于self.__class__.__name__的一些疑问

问题遇到的现象和发生背景

看廖神的orm不懂得地方

问题相关代码,请勿粘贴截图
class Field(object):
    def __init__(self,name,column_type):
        self.name=name
        self.column_type=column_type
    def __str__(self):
        print(self.__class__)
        return '<%s:%s>'%(self.__class__.__name__,self.name)

class StringField(Field):
    def __init__(self,name):
        print(self.__class__.__name__)
        super(StringField,self).__init__(name,'varchar(100)')

class IntegerField(Field):
    def __init__(self,name):
        super(IntegerField,self).__init__(name,'bigint')

#猜测  应该是有两种__name__ 一种是模块的 __name__==__main__  另一种是类属性 他的值应该就是类名
#猜测  难道一个类也被认为是一个模块?
#模块
print(__name__)
#类属性
t=StringField('cdl')
print(t.__class__)
#但是为什么 用hasattr 和 dir都找不到 这个 __name__
print(hasattr(t.__class__,__name__))
print(hasattr(StringField,__name__))
print(hasattr(t,__name__))
print(dir(t))
print(dir(StringField))
print(dir(t.__class__))

运行结果及报错内容

main
StringField
<class '__main__.StringField'>
False
False
False
['class', 'delattr', 'dict', 'dir', 'doc', 'eq', 'format', 'ge', 'getattribute', 'gt', 'hash', 'init', 'init_subclass', 'le', 'lt', 'module', 'ne', 'new', 'reduce', 'reduce_ex', 'repr', 'setattr', 'sizeof', 'str', 'subclasshook', 'weakref', 'column_type', 'name']
['class', 'delattr', 'dict', 'dir', 'doc', 'eq', 'format', 'ge', 'getattribute', 'gt', 'hash', 'init', 'init_subclass', 'le', 'lt', 'module', 'ne', 'new', 'reduce', 'reduce_ex', 'repr', 'setattr', 'sizeof', 'str', 'subclasshook', 'weakref']
['class', 'delattr', 'dict', 'dir', 'doc', 'eq', 'format', 'ge', 'getattribute', 'gt', 'hash', 'init', 'init_subclass', 'le', 'lt', 'module', 'ne', 'new', 'reduce', 'reduce_ex', 'repr', 'setattr', 'sizeof', 'str', 'subclasshook', 'weakref']

Process finished with exit code 0

我的解答思路和尝试过的方法

感觉如果__name__确实是类属性的话 那用hasattr 和 dir应该可以找到的吧 但是确实是没找到
但是self.class.__name__确实也没错

我想要达到的结果
print(hasattr(t.__class__,'__name__')) 中'__name__'是字符串要加引号, 
你不加引号__name__是变量名,获取的是当前的模块名'__main__', 
就成了检查t.__class__对象中有没有'__main__'属性了

呃。你把__name__ 用引号引起来撒

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632