【python入门】day15:特殊属性和特殊方法、演示创建对象的过程

文章详细介绍了Python中的类定义、实例化过程,以及特殊方法如`__init__`、`__str__`、`__len__`和`__add__`的使用。还探讨了`__new__`和`__bases__`在创建对象和继承中的作用。

特殊属性

在这里插入图片描述
下面是代码演示

#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)))
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Next2you

你真帅!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值