python 特殊方法、特殊属性

阅读: 评论:0

python 特殊方法、特殊属性

python 特殊方法、特殊属性

注:对象后有个. 但我不知道咋编辑才能不让它变格式

  • 对象__new__: 得到对象的属性/方法构成的{字典}
  • 对象__class__: 得到对象属于的类
  • 对象__basses__: 得知父类(全)
  • 对象__bass__: 得知继承的第一个父类
  • 对象__mro__: 得到类的层次结构
  • 对象__subclassses__(): 得知子类(列表)
  • 对象A__add__(对象B): 相加(广义)
  • 对象__len__(): 求长度
  • 对象__new__(): 创建对象
  • 对象__init__(): 对创建的对象初始化
  • __new__是一种负责创建类实例的静态方法,它无需使用 @staticmethod 装饰器修饰
  • __new__是在实例创建之前被调用的
  • __new__先被调用,__init__后被调用
  • __new__必须要有返回值,__new__的返回值传递给__init__的第一个参数,__init__不需要返回值
'''
对象.__dict__: 得到对象的属性/方法构成的{字典}
对象.__class__: 得到对象属于的类
对象.__basses__: 得知父类(全)
对象.__bass__: 得知继承的第一个父类
对象.__mro__: 得到类的层次结构
对象.__subclassses__(): 得知子类(列表)
对象A.__add__(对象B): 相加(广义)
对象.__len__(): 求长度
对象.__new__(): 创建对象
对象.__init__(): 对创建的对象初始化
'''
#==================== dict class basses mro subclasses
class A:pass
class B:pass
class C(B,A):def __init__(self,name,age):self.name = nameself.age = age
class D(A):pass
stu = C('NANA',21)
print('-------------------------')
print(stu.__dict__)  # {'name': 'NANA', 'age': 21}
print(C.__dict__)    # {'__module__': '__main__', '__init__': <function C.__init__ at 0x0000023B5519FE58>, '__doc__': None}
print('-------------------------')
print(stu.__class__) # <class '__main__.C'>
print(C.__class__)   # <class 'type'>
print('-------------------------')
print(C.__bases__) # (<class '__main__.B'>, <class '__main__.A'>)
print(C.__base__) # <class '__main__.B'>
print('-------------------------')
print(C.__mro__) # (<class '__main__.C'>, <class '__main__.B'>, <class '__main__.A'>, <class 'object'>)
print('-------------------------')
print(A.__subclasses__()) # [<class '__main__.C'>, <class '__main__.D'>]#==================== add len
# 参考原理:
a = 10
b = 3
c = a+b
d = a.__add__(b)
print(c) # 13
print(d) # 13lst = [1,3,6,7]
print(len(lst)) # 4
print(lst.__len__()) # 4class Student:def __init__(self,name):self.name = namedef __add__(self,other):return self.name + other.namedef __len__(self):return len(self.name)
stu1 = Student('NANA')
stu2 = Student('娜娜')
s = stu1 + stu2       # 注:if没在Student类里定义__add__方法,则执行不了stu1+stu2
print(s)                  # NANA娜娜
print(stu1.__add__(stu2)) # NANA娜娜
length = len(stu1)    # 注:if没在Student类里定义__len__方法,则执行不了len(stu1)
print(length)         # 4
print(stu1.__len__()) # 4'''__new__() 是一种负责创建类实例的静态方法,它无需使用 @staticmethod 装饰器修饰
__new__是在实例创建之前被调用的
_new__先被调用,__init__后被调用
__new__必须要有返回值,__new__的返回值传递给__init__的第一个参数,__init__不需要返回值
注意代码执行顺序
'''
#==================== new init
class Person(object):def __init__(self,name,age): # 5thprint('__init__()被调用,self的id为:{0}'.format(id(self))) # 9512self.name = nameself.age = agedef __new__(cls,*args,**kwargs): # 4thprint('__new__()被调用,cls的id为{0}'.format(id(cls))) # 0776obj = super().__new__(cls) # 重写父类object的newprint('创建的对象的id为:{0}'.format(id(obj))) # 9512return objprint('类对象object的id为:{0}'.format(id(object))) # 3648 1st
print('类对象Person的id为:{0}'.format(id(Person))) # 0776 2nd# 创建实例对象
p1 = Person('娜娜',21) # 3rd
print('实例对象p1的id为:{0}'.format(id(p1))) # 9512 6th

本文发布于:2024-01-30 04:12:12,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170655913619122.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:属性   方法   python
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23