python 内置方法


内置方法
0.format
format_dic= {'自由': '{obj.name}--{obj.where}--{obj.age}',
               '古风': '{obj.name}/--\{obj.age}/--\{obj.where}',
               '2b': '{obj.name}+++++{obj.where}+++{obj.age}'}
class A:
    def __init__(self,name,age,where):
        self.name =name
        self.age = age
        self.where = where

    def __format__(self,format_spec):
        if  not format_spec or format_spec not in format_dic:
            return format_dic['自由'].format(obj=self)
        else:
            return format_dic[format_spec].format(obj=self)

a = A('alex',23,'沙河')


print(a.__format__('古风'))
print(format(a,'2b'))
    format 只有当类中投这个内置方法才能使用,并且使用的过程中需要传入format_spec的参数,
    具体做用鬼知道!!!!!!!!!!!!!!!

 


1.__str__
__str__,在类中设置的方法,在遇到对该类的对象直接print的情况下后直接寻找类中的__str__,并且寻找__str__的返回值,如果没有则会返回
object中的__str__返回值,空间地址


class A:
    def __init__(self,name):
        self.name = name
    # def __str__(self):
    #     return '23333'


a = A('alex')
print(a)#<__main__.A object at 0x0000000000DBAD68>  object中的__str__返回值

一般的使用范围是在设置一个大类的时候,自定义一个方法的返回值

 


2.__repr__

__repe__于__str__类似,同样是自定义返回值,并且是他的备胎!
    1.在调取__str__的时候优先在方法中寻找__str__数值,找不到则会寻找__repr__
    2.调取__repr__的时候,相当于执行obj.__repr__,寻找__repr__找不到则寻找object中的__repr__方法

class int:
    # def __str__(self):
    #     return '2'
    def __repr__(self):
        return str(1)
a = int()
b = int()
print(repr(a))
print(str(a))
print(repr(b))

 


3.__call__
__call__是对象名能够如同函数一样被调用,
class A:
    def __init__(self):pass

    def __call__(self):
        print('233')
a = A()
a()

 


4.__new__
__new__ 构造方法:在实例化之前自定义一个实例化的途径
class A:
    __Nock = None
    def __new__(cls, *args, **kwargs):
        if cls.__Nock is None:
            obj = object.__new__(cls)
            cls.__Nock = obj
        return cls.__Nock

    def __init__(self,name):
        self.name = name

a = A('alex')
b = A('engo')
print(a)
print(b)
#单例模式,使用的是同一个内存空间,最终调取的属性是最后一个对象的属性
print(a.name)#结果engo
print(b.name)#结果engo

 


5.__eq__
__eq__方法:对判断的结果自定义,可以定义比较的方式
class A:
    pass
    # def __eq__(self, other):
    #     return True
object

a = A()
b = A()
print(a == b)   #应为是对象,所以是对象地址与对象地址的不交,不是类的比较
print(A())
func = 2
func2 = 2
print(func == func2)
is 比较的地址
== 比较的是数值
在类中 == 比较的是地址

 


6.__del__

__del__方法:兜底方法,python自动清除之前会执行一次__del__方法
应用范围,需要用到操作系统的地方,空间删除后用过的操作系统的部分方法没有关闭的情况下用__del__方法关闭。

class A:
    def __init__(self):
        self.f = open('wen','w')
    def __del__(self):
        self.f.close()
        print('233333')


a = A()

 


7.item
1.getitem
2.setitem
3.delitem
8.item  三种方法:
        getitem 查找
            将对象的属性读取方式改变
        setitem 修改增加
            将对象的属性修改和增加
        delitem 删除
            将对象的属性删除
class A:
    def __init__(self,name):
        self.name = name

    def __getitem__(self,key):    #转换一种读取方式
        return self.__dict__[key]

    def __setitem__(self, key, value):  #对属性进行修改和增加
        self.__dict__[key] = value

    def __delitem__(self, key): #删除属性
        del self.__dict__[key]

a = A('alex')
print(a['name'])
a['name'] = 'nihao'
print(a['name'])
del a['name']
print(a['name'])

 

posted @ 2018-04-19 20:27  残烛月夜  阅读(225)  评论(0编辑  收藏  举报