学习之元类

"""
元类:
    创建类(对象)的类叫元类
    类是元类创建出来的对象
    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))
# python中一切皆对象
# python中的类的类型是type(元类)
print(OneClass.__class__)
print(type(OneClass))

one = "abc"
print(type(one))
print(type(str))

# 任何一个类都是object的子类
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值