看廖神的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__ 用引号引起来撒
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!