【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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。