本系列将会陆续整理分享一些的Python内置函数。
-
通过百度网盘获取:
链接:https://pan.baidu.com/s/11x9_wCZ3yiYOe5nVcRk2CQ?pwd=mnsj
提取码:mnsj
-
前往GitHub获取:
https://github.com/returu/Python_built-in_functions
type(object)
type(name, bases, dict, **kwds)
-
object:要返回其类型的对象。如果不提供此参数,type() 将返回 <class ‘type’>,表示类型本身的类型; -
name:类的名称字符串,会成为类的 __name__ 属性。 -
bases:包含基类的元组,会成为类的 __bases__ 属性;如果为空,则会自动添加 object,因为 object 是所有类的最终基类。 -
dict:包含类体中的属性和方法定义的字典;在成为类的 __dict__ 属性之前,可能会被复制或包装。
返回值:
下面是一些使用 type() 函数的示例:
-
示例 1:单个参数——返回对象的类型
只传递一个对象参数时,返回该对象的类型。返回值是一个类型对象,通常与通过 object.__class__ 获取的结果是同一个对象。
a = {"a": 1}
print(type(a))
# 输出:<class 'dict'>
print(a.__class__)
# 输出:<class 'dict'>
测试对象的类型的话,推荐使用 isinstance() 内置函数来,因为它会考虑子类关系。
在下面的示例中,isinstance(dog,Animal)正确地判断出dog是Animal类的实例,包括其子类Dog的实例。而type(dog) == Animal则返回False,因为type(dog)得到的是Dog类型,而不是Animal类型。这体现了isinstance()在处理继承关系时的优势。
class Animal:
pass
class Dog(Animal):
pass
dog = Dog()
print(isinstance(dog, Animal))
# 输出:True
print(type(dog) == Animal)
# 输出:False
-
示例 2:三个参数——动态创建类
type() 也可以用来动态创建类。这在需要程序运行时创建类时非常有用。
-
动态创建一个新类:
在下面的示例中,通过type()动态创建了一个名为MyClass的新类,它继承自object,有一个属性attr和一个方法my_method。
# 动态创建了一个名为MyClass的类
MyClass = type('MyClass', (object,), {'attr': 'value', 'my_method': lambda self: 'Hello'})
print(MyClass)
# 输出:<class '__main__.MyClass'>
print(MyClass.__name__)
# 输出:MyClass
print(MyClass.__bases__)
# 输出:(<class 'object'>,)
print(MyClass.attr)
# 输出:value
print(MyClass().my_method())
# 输出:Hello
-
动态创建一个与现有类相同的类
# 现有类
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def introduce(self):
print(f"My name is {self.name} and I am {self.age} years old.")
# 使用 type() 动态创建相同的类
Person2 = type('Person2', (object,), {'__init__': Person.__init__, 'introduce': Person.introduce})
# 创建两个实例
person1 = Person("Alice", 30)
person2 = Person2("Bob", 25)
# 调用方法
person1.introduce()
# 输出:My name is Alice and I am 30 years old.
person2.introduce()
# 输出:My name is Bob and I am 25 years old.


本篇文章来源于微信公众号: 码农设计师