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