【python入门】day15:特殊属性和特殊方法、演示创建对象的过程
2024-01-03 13:27:10
特殊属性
下面是代码演示
#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__())
__new__与__init__演示创建对象的过程
利用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)))
文章来源:https://blog.csdn.net/gyf200708/article/details/135320576
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!