python面向对象常用内置方法

class Person():
    #构造函数
    def __init__(self,name,age=None):
        self.name=name
        self.age=age
        self.lists=[1,3,5]
        self.dicts={}
    #打印函数,类似java中的toSring()
    def __str__(self):
        return ‘Peason(%s)‘%self.name
    #对象的字典表示
    def __dict__(self):
        return {‘name‘:self.name}
    #对象相加
    def __add__(self,obj):
        return self.age+obj.age
    #匹配对象[index]模式
    def __getitem__(self,item):
        return self.lists[item]
    #匹配对象[key]=value模式
    def __setitem__(self,k,v):
        self.dicts[k]=v
        print(self.dicts)
    #匹配del 对象
    def __delitem__(self,k):
        del self.dicts[k]
        print(self.dicts)
    #可迭代对象必须实现
    def __iter__(self):
        return iter(self.lists)
    #在类的对象被执行的时候obj()会执行
    def __call__(self,args,**kwargs):
        print(‘i was called!%s,%s‘%(args,kwargs[‘b‘]))
    #在类对象被int()处理时调用
    def __int__(self):
        return self.age

if __name__==‘__main__‘:
    li=Person(‘lili‘)
    print(li)
    print(li.__dict__())
    li[‘score‘]=100
    li[‘score2‘]=200
    del li[‘score‘]
    for i in li:
        print(i)
    li(10,b=20)
    li.age=30
    print(int(li))

getattr、setattr、delattr

当使用obj.x = y的时候触发对象的setattr方法,当del obj.x的时候触发对象的delattr方法。
当尝试访问对象的一个不存在的属性时 obj.noexist 会触发getattr方法,getattr方法是属性查找中优先级最低的。
可以重写这3个方法来控制对象属性的访问、设置和删除。
**特别注意:如果定义了getattr,而没有任何代码(即只有pass),则所有不存在的属性值都是None而不会报错,可以使用super().__getattr__()方法来处理**

class Student:
    def __getattr__(self, item):
        print(‘访问一个不存在的属性时候触发‘)
        return ‘不存在‘

    def __setattr__(self, key, value):
        print(‘设置一个属性值的时候触发‘)
        # self.key = value  # 这样会无限循环
        self.__dict__[key] = value

    def __delattr__(self, item):
        print(‘删除一个属性的时候触发‘)
        if self.__dict__.get(item, None):
            del self.__dict__[item]

stu = Student()
stu.name = ‘zlw‘  # 设置一个属性值的时候触发
print(stu.noexit)  # 访问一个不存在的属性时候触发 , 返回‘不存在‘
del stu.name  # 删除一个属性的时候触发

enter、exit

这两个方法的重写可以让我们对一个对象使用with方法来处理工作前的准备,以及工作之后的清扫行为。

class db_conn(object):

    def __init__(self, conn_id):
        self.conn = MySqlHook.get_connection(conn_id=conn_id).get_hook().get_conn()
        self.cur = self.conn.cursor()

    def __enter__(self):
        return self.cur

    def __exit__(self, exc_type, exc_value, exc_trace):
        self.conn.commit()
        self.cur.close()
        self.conn.close()

iter、next

这2个方法用于将一个对象模拟成序列。内置类型如列表、元组都可以被迭代,文件对象也可以被迭代获取每一行内容。重写这两个方法就可以实现自定义的迭代对象。

class MyRange():
    def __init__(self,begin,end,step):
        self.begin=begin
        self.end=end
        self.step=step
        self.count=0

    def __iter__(self):
        return self

    def __next__(self):
        if self.begin <self.end:
            self.count=self.begin
            self.begin=self.begin+self.step
            return self.count
        else:
            raise StopIteration(‘已经到达临界‘)

if __name__==‘__main__‘:
    ra=MyRange(1,20,3)
    for item in ra:
        print(item)

原文地址:https://www.cnblogs.com/wangbin2188/p/12098536.html

时间: 2024-12-11 02:15:47

python面向对象常用内置方法的相关文章

python的常用内置方法

__author__ = 'coco' ''' python内置函数 ''' # all() 全为真,才为真 print(all([0,-2,3])) # False print(all([1,-2,3])) # True # any() 任意为真,则为真 print(any([1,-6,3])) # True print(any([0,'',1])) # True # bin() 十进制转二进制 print(bin(8)) #0b1000 # bool() 判断真假 print(bool(0)

迭代器,生成器,生成器表达式,常用内置方法

迭代器 迭代器的定义:迭代器指的是迭代取值的工具,迭代是一种重复的过程,每一次重复都是基于上一次的结果而来单纯的重复不是迭代.比如:while的死循环打印同一个值就不是迭代. l=['a','b','c'] i=0 while i < len(l):      print(l[i])      i+=1 这个while循环每一次取值都是基于上一次的结果往下进行,这就是一个迭代的过程. 迭代器的使用原因:迭代器提供了一种通用的且不依赖索引的迭代取值的方式 迭代器的使用方式 特点:可迭代的(iter

Python模块导入和常用内置方法

模块导入和常见内置方法 __file__: os.path.dirname(__file__)和os.path.join(dirname, filename),通过sys.path.append()可以把模块添加到Python的环境变量目录中 __name__: 直接执行py文件时__name__返回"__main__", 通过import调用时__name__返回的是(包名.模块名) __doc__: 返回.py文件中"""xxx""

Python中类的内置方法与继承关系实例

1.类的内置方法 Python内部类:所谓内部类,就是在类的内部定义的类,主要目的是为了更好的抽象现实世界.例子:汽车是一个类,汽车的底盘轮胎也可以抽象为类,将其定义到汽车内中,而形成内部类,更好的描述汽车类,因为底盘轮胎是汽车的一部分. 内部类实例化方法: 方法1:直接使用外部类调用内部类方法2:先对外部类进行实例化,然后再实例化内部类 out_name = outclass_name() in_name = out_name.inclass_name() in_name.method() #

Python字符串的内置方法

如何查看字符串有哪些内置方法? 我们可以先创建一个类型为字符串的变量,然后查看该变量的类型. 然后用dir()方法查看字符串的内置方法有哪些.最后可以用help()查看各个内置方法的用法 >>> string='hello' >>> type(string) <type 'str'> >>> dir(str) ['__add__', '__class__', '__contains__', '__delattr__', '__doc__',

Python列表的内置方法

常用的列表内置方法: append() 列表中追加数据,追加的数据在列表最后面 >>> name_list=['zhangsan', 'lisi', 'wangwu'] >>> name_list.append('liumazi') >>> name_list ['zhangsan', 'lisi', 'wangwu', 'liumazi'] del list[#]: 删除列表中指定下标位置的元素 >>> name_list ['zh

4-19 面向对象 的内置方法

1,__str__ 和 __repr__ __str__就是改变对象的字符串显示. Python有一个内置的函数叫repr,它能把一个对象用字符串的形式表达出来以便辨认,这就是"字符串表示形式".repr就是通过__repr__这个特殊方法来得到一个对象的字符串表示形式.如果没有实现__repr__,当我们再控制台里打印一个变量的实例时,得到的字符串可能会是<__main__.Object at 0x14af07dbe80>,这个表示的是打印的对象,以及对象的内存地址. s

NO.4:自学python之路------内置方法、装饰器、迭代器

引言 是时候开始新的Python学习了,最近要靠英语,可能不会周更,但是尽量吧. 正文 内置方法 Python提供给了使用者很多内置方法,可以便于编程使用.这里就来挑选其中大部分的内置方法进行解释其用途. abs() #求取绝对值,例子. a = -5 abs(a)#求绝对值 all() #迭代对象全为真,则返回Ture,否则返回False,例子. all([1,5,6])#True all([5,0,6])#False any() #与all类似,但是有真则返回Ture,全假返回False,例

python 类中内置方法的重写

为达成目的,经常会在类中将一些内置方法进行重写,最常见的例如__setattr__,下面就通过内置属性,来查看重写会带来什么变化 先定义一个测试用的类,代码如下 class base: def __init__(self): pass inspect.getmembers(base): # 查看内置属性 打印结果如下 ('__class__', <class 'type'>) ('__delattr__', <slot wrapper '__delattr__' of 'object'