#print(dir(object))
class A:
pass
class B:
pass
class C(A,B):
def __init__(self,name,age):
self.name=name
self.age=age
x=C('jack',20) # x是C类的一个实例对象
print(x.__dict__) # 查看实例对象的所有属性的字典
print(C.__dict__)
print('--------')
print(x.__class__) # 输出了对象所属的类
print(C.__bases__) # 输出了对象的父类(元组)
print(C.__base__) # 输出最近的父类
print(C.__mor__) # 查看类的层次结构
print(A.__subclasses__()) # 子类的列表
class animal(object):
pass
class monkey(animal):
def __init__(self,name,age):
self.name=name
self.age=age
def __str__(self):
return '{0},{1}'.format(self.name,self.age)
class human(animal):
native_place='China'
def __init__(self,name,age):
self.name=name
self.age=age
def __str__(self):
return'{0},{1}'.format(self.name,self.age)
def __len__(self):
return len(self.name)
def __add__(self, other):
return self.name+other.name
human1=human('jack',18)
human2=human('rose',19)
print(dir(human))
print(human.__dict__,'\n',human1.__dict__)
print(animal.__subclasses__())
print(human.__bases__)
print(type(human1),human1.__class__)
print(human1.__len__()) #特殊方法,自定义的类不像系统自带的数据类型,它们的方法是已经编好的,而自定义的类的特殊方法(可以找到对应的内置函数的方法)需要重写,返回一个新的方法规则
print(human1+human2)
lst=[4,5,7]
print(lst.__len__())
利用print函数打出各个对象的id值
这里面图后面的数字都是 输出后id的后四位值 红线是执行路线 黄圈是传参路线
程序先执行的p1右侧的内容 然后把p1传给Person 的cls 在object当中进行了创建对象obj
输出obj id为7104 然后return返回给 obj的self
所以self输出的是7104
然后到了下面的init 执行初始化方法
之后又把self传给了p1
这张图里面 new在前创建对象 init在后是为这个对象的实例属性进行赋值
最后把创建的对象放在p1中进行储存
示例代码
class Person(object):
def__new_(cls,*args,**kwargs):
print(’__new__被调用执行了,cls的id值为[0}’.format(id(cls)))
obj=super().__new__(cls)
print(’创建的对象的id为:{0)’.format(id(obj)))
return obj
def __init__(self,name,age)
self.name=name
self.age=age
print('object这个类对象的id为:{0}'.format(id(object)))
print('Person这个类对象的id为:{0}'.format(id(Person)))
#创建Person类的实例对象
pl=Person('张三',20)
print('p1这个Person类的实例对象的id:{0}'.format(id(p1)))