Python(特殊方法/特殊属性/面向对象*****)

特殊属性
_dict__      获得类对象或实例对象所绑定的所有属性和方法的字典

特殊方法
_1en_()      通过重写_1en_()方法,让内置函数1en()的参数可以是自定义类型
_add_()      通过重写__add_()方法,可使用自定义对象具有"+"功能
_new_()      用于创建对象
_init_()     对创建的对象进行初始化

 

特殊属性

# print(dir(object))


####################
class A:
    pass
class B:
    pass

class D(A):
    pass


class C(A,B):
    def __init__(self,name,age):
        self.name=name
        self.age=age

##创建C类的对象

x=C('jack',20)   ##x是C类型的一个实例对象

print(x.__dict__)  ###实例对象的属性字典 {'name': 'jack', 'age': 20}

print(C.__dict__)  #{'__module__': '__main__', '__init__': <function C.__init__ at 0x000001E785CEB4C0>, '__doc__': None}

print('-----------------------')
print(x.__class__)  #<class '__main__.C'>
print(C.__bases__)  ## C类的父类类型的元素 (<class '__main__.A'>, <class '__main__.B'>)

print(C.__base__)  ## 类的基类   <class '__main__.A'>

print(C.__mro__)  ##类的层次结构 (<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>)


print(A.__subclasses__())  ####查A有几个子类列表  [<class '__main__.D'>, <class '__main__.C'>]

 

特殊方法

 

a=20
b=100

c=a+b
print(c)
# print(d)

class Student:
    def __init__(self,name):
        self.name=name
    def __add__(self, other):  ###s=stu1+stu2需加上
        return self.name+other.name       ###s=stu1+stu2需加上

    def __len__(self):  ####计算列表长度
        return len(self.name)


stu1=Student('333')
stu2=Student('李四')

s=stu1+stu2   ###实现两个对象得加法运算(因为在Student类中,编写__add__()特的方法
print(s)

s=stu1.__add__(stu2)   #方法2
print(s)


print('----------------------------')

lst=[11,22,33,44]
print(len(lst))  ####计算列表长度
print(lst.__len__())

print(len(stu1))

 

newinit

 

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):
        print('__init__被调用了,self的id值为:{0}'.format(id(self)))
        self.name=name
        self.age=age

print('object这个类对象id为:{0}'.format(id(object)))
print('Person这个类对象id为:{0}'.format(id(Person)))



##

p1=Person('张三',20)
print('p1这个persson类的实例对象的id:{0}'.format(id(p1)))