Python 问题 收集

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'>

猜你喜欢

转载自blog.csdn.net/lengfengyuyu/article/details/84872630