"""
元类:
创建类(对象)的类叫元类
类是元类创建出来的对象
python中内置的元类是type
type这个元类是自己创建的(type)
type是所有类的类型
任何一个类都是object的子类
type元类的父类也是object
object的类型也是type
object是所有类的父类
"""
"""
1、类型(Type)和类(Class)
在Python中,一切都是对象。类也是对象。所以一个类(class)必须有一个类型(type)。
实例的类型?
类的类型是什么呢?
类的类型是类型
type的类型是什么?
type的类型也是type
什么是元类?
用来创建类的类,叫做元类
Python中的任何新式类以及Python 3中的任何类都是type元类的一个类。
type就是Python在背后用来创建所有类的元类
注意区分元类和继承的基类:
type:是元类,所有的类都是通过type所创建出来的
object:顶层的基类,所有类的继承顶层父类都是object
2、使用type动态定义类
内置type()函数在传递了一个参数时将返回一个对象的类型。对于新式类,
通常type(name, bases, dict)调用type():
name:指定类名称,将成为该类的name属性。
bases:指定继承类的基类元组,将成为该类的bases属性。
dict:指定包含类主体定义的名称空间字典,将成为该类的dict属性。
"""
class OneClass:
pass
obj1 = OneClass()
print(obj1.__class__)
print(type(obj1))
print(OneClass.__class__)
print(type(OneClass))
one = "abc"
print(type(one))
print(type(str))
print(issubclass(OneClass, object))
print(issubclass(int, object))
print()
"""
type的两种使用:
1、获取数据的类型,type(obj) ->获取obj的类型
2、创建类的type(name,bases,dict) ->创建一个类
参数:
name:类名(str)
bases:继承的父类(元组)
dict:属性和方法组成的(字典)
返回值:
创建出来的类
object:python中所有的类都是继承于object(顶级的父类)
类:
模版,模子,模具
对象:
实际的产品(看得见摸得着的东西)
"""
class OneClass(object):
attr1 = "abc"
attr2 = 100
print(type(OneClass))
TwoClass = type("TwoClass", (object,), {"attr1": 100, "attr2": "defd"})
print(TwoClass.__dict__)
"""
2、使用type动态定义类
内置type()函数在传递了一个参数时将返回一个对象的类型。对于新式类,
通常type(name, bases, dict)调用type():
name:指定类名称,将成为该类的name属性。
bases:指定继承类的基类元组,将成为该类的bases属性。
dict:指定包含类主体定义的名称空间字典,将成为该类的dict属性。
元类type创建类需要三个参数,
第一个为类名(str类型),即类的_name_属性
第二个为继承的父类(tuple类型),
第三个是属性和方法{dict类型}
def move(self):
print("---move---方法“)
use = type("user", (), {"name": "小明", "move": move})
"""
"""
class Person:
pass
class MyClass(object):
class_attr1 = 100
class_attr2 = 'acb'
def __init__(self, a, b, c):
self.a = a
self.b = b
self.c = c
def instance_method(self):
print("实例方法")
@classmethod
def class_method(cls):
print("类方法")
if __name__ == '__main__':
pass
"""
class Person:
pass
def init_method(self, a, b, c):
self.a = a
self.b = b
self.c = c