python-38-用于面向对象的内置函数

前言

在面向对象中有很多内置方法,你会发现都很容易知道它的用处与平时用到的函数一样。

  • 1、__str__
  • 2、__repr__
  • 3、__len__
  • 4、__del__
  • 5、__call__
  • 6、item系列
  • 7、__new__
  • 8、__eq__
  • 9、__hash__

1、__str__:一旦被调用,就返回调用这个方法的对象的内存地址。

# 1、__str__:一旦被调用,就返回调用这个方法的对象的内存地址
class A:
    def __init__(self,name):self.name=name
    def __str__(self):
        return ‘A is object ‘+self.name
res = A(‘广深小龙‘)
print(res)  # 打印一个对象,相当于调用了a.__str__
print(‘%s:%s‘%(‘A:‘,res))

2、__repr__:

  • repr(),只会找__repr__,如果没有找父类的,优先推荐repr。
  • 如果没有__str__方法,会先找本类中的__repr__方法,再没有再找父类中的__str__。
  • print(obj)/‘%s‘%obj/str(obj)的时候,实际上是内部调用了obj.__str__方法,如果str方法有,那么他返回的必定是一个字符串。
# 2、__repr__:
class A:
    def __init__(self,name):self.name=name
    def __str__(self):
        return ‘A is object ‘+self.name
    def __repr__(self):return str(self.__dict__)
res = A(‘广深小龙‘)
print(res)  # 打印一个对象,相当于调用了a.__str__
print(‘%s:%s‘%(‘A:‘,res))
print(repr(res))

3、__len__:内置方法有很多,可以定制自己的内置方法

# 3、__len__:内置方法有很多,可以定制自己的内置方法
class A:
    def __init__(self,name):
        self.name=[]
    def __len__(self):
        return len(self.name)+1
res=A(‘小龙龙‘)
res.name.append(‘广深小龙‘)
res.name.append(‘广深小龙‘)
print(len(res))

4、__del__:析构函数:

删除一个对象之前,进行一些收尾工作

# 4、__del__:析构函数
# 删除一个对象之前,进行一些收尾工作
class A:
    def __del__(self):
        print(‘执行我了‘)
a=A()
del a   # 既执行了del方法,也删除了变量a

5、__call__,调用能直接返回想要返回的功能,不用传方法名称:

# 5、__call__,调用能直接返回想要返回的功能,不用传方法名称
class A:
    def __init__(self,name):self.name=name
    def __call__(self, *args, **kwargs):
        print(self.__dict__)
a=A(‘小龙龙‘)()        # 调用内部__call__方法

6、item系列:

①list:增删查改

# 1、list:增删查改
class A:
    def __init__(self,name):self.name=name
    def __getitem__(self, item):
        if hasattr(self,item):
            return self.__dict__[item]
    def __setitem__(self, key, value):
        self.__dict__[key]=value
    def __delitem__(self, key):del self.__dict__[key]
a=A(‘广深小龙‘)
print(a[‘name‘])    # 查
a[‘age‘]=‘22‘       # 增
print(a.age)
a[‘age‘]=‘55‘       # 改
print(a[‘age‘])
del a.name           # 删
del a[‘age‘]
print(a.__dict__)

7、__new__:构造方法

# 2、__new__:构造方法
class A:
    def __init__(self):
        print(‘init‘)
    def __new__(cls, *args, **kwargs):  # 会先执行__new__方法
        print(‘__new__‘)
        return object.__new__(A, *args, **kwargs)
a = A()
# 会先执行cls,object.__new__,再执行self的__init__

7-1、设计模式:单列模式

  • 一个类只有一个实例,多个实例内存地址是一样。
  • 当你第一次实例化这个类的时候 就创建一个实例化的对象。
  • 当你之后再来实例化的时候 就用之前创建的对象。
class A:
    __res=False
    def __init__(self,name,age):
        self.name=name
        self.age=age
    def __new__(cls, *args, **kwargs):  # 会先执行__new__方法
        if cls.__res:
            return cls.__res
        cls.__res=object.__new__(A)
        return cls.__res
a = A(‘广深小龙‘,‘22‘)
b = A(‘小龙女‘,‘18‘)
print(a)
print(b)
print(a.name)
print(b.name)
a.addr=‘广深‘
print(b.addr)   # a追加,但b也有。单列模式

8、__eq__:比较两个值,也是可定制处理。

# 8、__eq__:比较两个值,也是可定制处理
class A:
    def __init__(self,name):
        self.name=name
    def __eq__(self, other):
        if self.name==other.name:
            print(‘%s 就是等于 %s‘%(self.name,other.name))
            return True
        else:False
res1=A(‘gsxl‘)
res2=A(‘gsxl‘)
print(res1==res2)   # 正常是不相等,但__eq__可以定制处理

9、__hash__:定制化将哈希函数。

# 9、__hash__:定制化将哈希函数
class A:
    def __init__(self,name,hname):
        self.name=name
        self.hname=hname
    def __hash__(self):
        return hash(self.name+self.hname)

res1=A(‘gsxl‘,‘2233‘)
res2=A(‘gsxl‘,‘2233‘)
print(hash(res1))
print(hash(res2))

欢迎来大家QQ交流群一起学习:482713805 !!!

原文地址:https://www.cnblogs.com/gsxl/p/12542700.html

时间: 2024-10-31 22:22:12

python-38-用于面向对象的内置函数的相关文章

python's fourthday for me 内置函数

locals:  函数会以字典的类型返回当前位置的全部局部变量. globals:  函数会以字典的了类型返回全部的全局变量. a = 1 def func(): b = 2 print(locals()) print(globals()) func() 字符串类型的代码执行:eval, exec, complie eval: 执行字符串类型的代码,并返回最终结果. print(eval('2+2')) # 4 n = 4 print(eval('n+4')) # 8 eval('print(6

python基础12_匿名_内置函数

一个二分查找的示例: # 二分查找 示例 data = [1, 3, 6, 7, 9, 12, 14, 16, 17, 18, 20, 21, 22, 23, 30, 32, 33, 35, 36, 66] def binary_search(dataset, find_num): print(dataset) if len(dataset) > 1: mid = int(len(dataset) / 2) if dataset[mid] == find_num: # find it print

python全栈开发-Day13 内置函数

一.内置函数 注意:内置函数id()可以返回一个对象的身份,返回值为整数. 这个整数通常对应与该对象在内存中的位置,但这与python的具体实现有关,不应该作为对身份的定义,即不够精准,最精准的还是以内存地址为准. is运算符用于比较两个对象的身份,等号比较两个对象的值,内置函数type()则返回一个对象的类型 #更多内置函数:https://docs.python.org/3/library/functions.html?highlight=built#ascii 二.内置函数详情 1.abs

python补充最常见的内置函数

最常见的内置函数是: print("Hello World!") 数学运算 abs(-5)                         # 取绝对值,也就是5 round(2.6)                       # 四舍五入取整,也就是3.0 pow(2, 3)                        # 相当于2**3,如果是pow(2, 3, 5),相当于2**3 % 5 cmp(2.3, 3.2)                   # 比较两个数的大小

[python] 之all()和any()内置函数

在python 2.5版本以上开始引入,其基本使用方法如下: 一.all()内置函数 语法:all(iter) 说明: 1. iter为可迭代对象,比如列表,元组,字符串... 2. 若iter中的每一个元素(全部)都为布尔真(或布尔值意味着False的一些元素,比如'0','False',空字符' ' 等)时,返回True 3. 空的列表或元组,也返回True 二.any()内置函数 语法:any(iter) 说明: 1. iter为可迭代对象,比如列表,元组,字符串... 2. 若iter中

Python基础(七)内置函数

今天来介绍一下Python解释器包含的一系列的内置函数,下面表格按字母顺序列出了内置函数: 下面就一一介绍一下内置函数的用法: 1.abs() 返回一个数值的绝对值,可以是整数或浮点数等. 1 2 3 4 5 6 print(abs(-18))          print(abs(0.15)) result: 18 0.15 2.all(iterable) 如果iterable的所有元素不为0.''.False或者iterable为空,all(iterable)返回True,否则返回False

python学习之路-4 内置函数和装饰器

本篇涉及内容 内置函数 装饰器 内置函数 callable()   判断对象是否可以被调用,返回一个布尔值 1 2 3 4 5 6 7 8 9 10 11 num = 10 print(callable(num))   # num不能够被调用,返回False    def f1():     print("name")    print(callable(f1))     # f1可以被调用,返回True    # 输出 False True ?chr()   将十进制整数转换为asc

Python自学之路——Python基础(四)内置函数

对上表一些比较重要常用的内置函数做一个整理 chr()与ord()     chr()是将ASCII中十进制编号转换成相应的字符,而ord()刚好相反 c = chr(49) o = ord('1') print(c) print(o) 输出结果: 1 49 知道了chr()的基本用法,可以利用它来生成一个字母验证码,因为验证码都是随机生成的,所以这里要涉及到random模块.在ASCII中,大写字母的十进制编号是从65到90. 小写字母是97到122 1 import random 2 li

Python基础第十一天——内置函数的补充、内置函数与lambda、递归

一.拾遗 1.生成器表达式形式的多个函数之间的协同工作. 例:做一包子吃一个包子 优点:更省内存. 以上例子的原理: 重点★★★★★ 源代码: import time import random # 装饰器 def init(func): '''生成器表达式的初始化''' def wrapper(*args,**kwargs): g=func(*args,**kwargs) next(g) return g return wrapper def cook(people,count): '''定义

python之迭代器生成器和内置函数,匿名函数

今天学习了迭代器生成器以及内置函数和匿名函数,说实话有些懵圈,有些难度了. 一.迭代器和生成器 1.如何从列表.字典中取值的: index索引 for循环 凡是可以使用for循环取值的都是可迭代的 (1)可迭代协议:内部含有__iter__方法的都是可迭代的 (2)迭代器协议:内部含有__iter__方法和__next__方法的都是迭代器 什么是可迭代的:内部含有__iter__方法的都是可迭代的 什么是迭代器:迭代器=iter(可迭代的),自带一个__next__方法 可迭代最大的优势:节省内