Python self.__class__.__name__ 的实际含义

基本概念

  • python中的下划线的含义

    单下划线 -> 保护变量;只有类对象和子类对象可以访问

    双下划线 -> 私有变量;只有类中的方法可以访问

    双下划线开头和结尾 -> python 中特殊方法的标识

实际含义

self.__class__.__name__ : 类的对象实例调用__class__属性时会指向该实例对应的类,而后再调用 __name__ 就会输出该实例对应的类的类名

exp :

class Home(object):
    def __init__(self, name):
        self.name = name
        print("__class__:", self.__class__) 
        print("create an instance of:", self.__class__.__name__) 

>> 
__class__: <class '__main__.Home'>
create an instance of: Home

其他 : python其他的特殊函数

(1)__init__()

__init__() 是非常典型的一个特殊方法,它用于对象的初始化。在实例化类的过程中,被自动调用。

(2)__next__()

对迭代器调用 next() 函数,便能生成下一个值。这过程的背后,next() 调用了迭代器__next__()。

(3)__len__()

调用 len() 函数时,便能返回一个容器的长度。原因就是容器类中实现了 __len__() 方法,调用 len() 函数时将自动调用容器的 __len__() 方法。

(4)__str__()

在使用 print() 函数时将自动调用类的 __str__() 方法

(5)__getitem__()

类中实现该方法,那么它的实例对象便拥有了通过下标来索引的能力;exp:

class A():
    def __getitem__(self, index):
        return index * 2
a = A()
a[2] ## 调用了 __getitem__()方法

(6)__call__()

将类的实例对象变为可以调用的对象(即可以将()应用到本身并执行,例如自定义的函数,python内置函数以及类实例对象也就是重写了__call__的类的对象)

一般类中没有重写__call__,所以一般的类的实例对象是不能被调用的

exp:

class CLanguage:
    # 定义__call__方法
    def __call__(self,name,add):
        print("调用__call__()方法",name,add)
clangs = CLanguage()
clangs("nzy","jack")
clangs.__call__("nzy","jack")		# 类实例() 等价于 类实例.__call__()

>> 调用__call__()方法 nzy jack
>> 调用__call__()方法 nzy jack

posted @ 2022-06-22 10:15  jacknie23  阅读(1158)  评论(0编辑  收藏  举报