类
1.1 self.__class__() 和 self.__class__
self.__class__
就是一个类名,相当于A
,类名的类型是type
self.__class__(xx)
就是一个类实例,相当于调用A(xx)
,它的类型就是A
def class_self_class():
class A(object):
def __init__(self,name):
self.name = name
def nf(self):
print(self.__class__(self.name), type(self.__class__(self.name)), self.__class__, type(self.__class__),sep='\n')
print(isinstance(self.__class__(self.name),self.__class__))
def __str__(self):
return self.name
a = A("A")
a.nf()
print(type(a))
# 输出结果
A
<class '__main__.class_self_class.<locals>.A'>
<class '__main__.class_self_class.<locals>.A'>
<class 'type'>
True
<class '__main__.class_self_class.<locals>.A'>
1.2 self.__class__()和 Class() 异同
都可以用来创建类,但是如果self.__class()__
用在继承的父类里,能够自动分清当前对象属于子类还是父类?
def class_cons():
class Foo(object):
def create_new(self):
return self.__class__()
def create_new2(self):
return Foo()
class Bar(Foo):
pass
b = Bar()
c = b.create_new()
print(type(c)) # We got an instance of Bar
d = b.create_new2()
print(type(d)) # we got an instance of Foo
# 输出结果
<class '__main__.class_cons.<locals>.Bar'>
<class '__main__.class_cons.<locals>.Foo'>