python中module和name_Python的名称、类、dict、module、qualname以及dir的含义和使用场景,python,nameclassdictmodulequalname,...

本文详细介绍了Python中对象的几个重要属性:__dict__,__class__,__name__,__module__,__qualname__。通过实例解析了它们的作用和应用场景,包括如何使用这些属性来获取类和对象的信息,以及在继承关系中的表现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

前言

在一些底层代码中,我们经常可以看到__name__/__class__等用法的存在,其实我们能从字面上的意思大概猜到各自的作用,但是具体不知到他们指向的是哪个对象。今天就统一记录一下。

这些模块的功能我并没有去百度,我是直接去拿着python IDE去测试的,其实对于这种很简单的功能的测试,建议大家不要第一想法就是搜索引擎查找用法,而是应该自己尝试去测试一下,然后总结出来。

实战

1、__dict__

__dict__其实是对象的一个属性,python一切皆对象,所以我说的对象当然是包含类的啦 。

我们举一个例子,看一下类的__dict__属性下面有哪些变量

class Student:

type = "person"

class_num = 34

def __init__(self, name, age):

self.name = name

self.age = age

def get_age(self):

return self.age

@classmethod

def get_teacher(self):

return "Brain"

stu = Student("weihua", 18)

print(Student.__dict__)

print("*"*30)

print(stu.__dict__)

输出

{'__module__': '__main__', 'type': 'person', 'class_num': 34, '__init__':

Student.__init__ at 0x0000016E50734598>, 'get_age':

0x0000016E519626A8>, 'get_teacher': , '__dict__':

, '__weakref__':

'Student' objects>, '__doc__': None}

******************************

{'name': 'weihua', 'age': 18}

可以看出, 类的静态函数、类函数、普通函数、全局变量、类成员变量以及一些内置的属性都是放在

类__dict__

里的

而对象只把自己的成员变量放在

__dict__

中。

继承下的__dict__

class Student:

type = "person"

class_num = 34

def __init__(self, name, age):

self.name = name

self.age = age

def get_age(self):

return self.age

@classmethod

def get_teacher(self):

return "Brain"

class MaleStudent(Student):

city = "北京"

def __init__(self,height, name, age):

self.height = height

super().__init__(name, age)

def male_student_get_height(self):

return self.height

print(Student.__dict__)

print("*"*30)

print(MaleStudent.__dict__)

print("*"*30)

stu = Student("weihua", 18)

male_stu = MaleStudent('170', "lily", 18)

print(stu.__dict__)

print("*"*30)

print(male_stu.__dict__)

输出

{'__module__': '__main__', 'type': 'person', 'class_num': 34, '__init__':

Student.__init__ at 0x000001D213584598>, 'get_age':

0x000001D2147D26A8>, 'get_teacher': , '__dict__':

, '__weakref__':

'Student' objects>, '__doc__': None}

******************************

{'__module__': '__main__', 'city': '北京', '__init__':

0x000001D2147D27B8>, 'male_student_get_height':

MaleStudent.male_student_get_height at 0x000001D2147D2840>, '__doc__': None}

******************************

{'name': 'weihua', 'age': 18}

******************************

{'height': '170', 'name': 'lily', 'age': 18}

可以看处,发生继承后:

父类与子类的__dict__各不影响,他们各自只存有自己类定义时静态函数、类函数、普通函数、全局变量、类成员变量以及一些内置的属性。

而继承下,实例化后的对象的__dict__却不同。子类实例化的对象的__dict__包含了自己的实例变量与父类的实例变量

2、__class__

这个就很简单了,__class__就是返回自己的父类

class Student:

type = "person"

class_num = 34

def __init__(self, name, age):

self.name = name

self.age = age

def get_age(self):

return self.age

@classmethod

def get_teacher(self):

return "Brain"

class MaleStudent(Student):

city = "北京"

def __init__(self,height, name, age):

self.height = height

super().__init__(name, age)

def male_student_get_height(self):

return self.height

print(Student.__class__)

print("*"*30)

print(MaleStudent.__class__)

print("*"*30)

stu = Student("weihua", 18)

male_stu = MaleStudent('170', "lily", 18)

print(stu.__class__)

print("*"*30)

print(male_stu.__class__)

输出

******************************

******************************

******************************

3、__name__

这个__name__大家可以自行查询它的原理,我这里只讲一下他经常使用的方式与场景。

我们很熟悉的有个

if __name__ == '__main__':

pass

不用多说。表示当前的py文件如果是自身执行时,__name__即等于“__main__”,就会执行下main的代码;如果当前文件是被导入,则__name__就不是"__main__",当然就不会执行后面的代码。

还有一个场景,经常用到,请看下面的代码:

class Student:

type = "person"

class_num = 34

def __init__(self, name, age):

self.name = name

self.age = age

def get_age(self):

print(self.__class__.__name__) # 注意这里

return self.age

@classmethod

def get_teacher(self):

return "Brain"

print(Student.__class__.__name__) # 注意这里

print("*"*30)

stu = Student("weihua", 18)

print(stu.__class__.__name__) # 注意这里

首先是在类的方法中,我们如果想动态的获取当前类的名称的时候,我们可以使用 self.__class__.__name__。

第二中就是,我们可以直接对类或者对象使用xxx.__class__.__name__ ,首先取到xxx的父类,然后返回他的名字

4、__module__

即输出当前对象所在的文件的名称

class Student:

type = "person"

class_num = 34

def __init__(self, name, age):

self.name = name

self.age = age

def get_age(self):

print(self.__class__.__name__)

return self.age

@classmethod

def get_teacher(self):

return "Brain"

def get_module():

pass

print(get_module.__module__)

print("*"*30)

print(Student.__module__)

print("*"*30)

stu = Student("weihua", 18)

print(stu.__module__)

#输出

__main__

******************************

__main__

******************************

__main__

5、__qualname__

其实就是返回当前对象的所有父级对象的名称,以  “.” 连接。

看代码比较清晰:

class C:

def f():

pass

class D:

def g():

pass

>>> C.__qualname__

'C'

>>> C.f.__qualname__

'C.f'

>>> C.D.__qualname__

'C.D'

>>> C.D.g.__qualname__

'C.D.g'

但是注意一点:__qualname__在python3.3以后才得到支持。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值