Python面试:类的特殊方法

简介: Python面试:类的特殊方法

1、call函数

class Foo():
    def __init__(self):
        print("Foo-init")
    def __call__(self):
        print("Foo-call")
f = Foo()
f()  # 重载了括号运算符
"""
Foo-init
Foo-call
"""

2、类装饰器

class Decorator():
    def __init__(self, func):
        print("Decorator-init")
        self.fun = func
    def __call__(self, args1, args2):
        print("Decorator-call")
        self.fun(args1, args2)
@Decorator
def add(a, b):
    print("a+b:", a+b)
# add(1, 2)
"""
Decorator-init
Decorator-call
a+b: 3
"""

3、new和init

class MyTuple(tuple):
    def __init__(self, seq):
        print("MyTuple-init")
        print("self:", self)
        # takes no parameters
        super(MyTuple, self).__init__()
    def __new__(cls, seq):
        print("MyTuple-new")
        # 过滤
        g = [i for i in seq if isinstance(i ,int)]
        # 返回对象:self
        return super(MyTuple, cls).__new__(cls, g)  
t = MyTuple([1, 2, "-1"])
print(type(t), t)
"""
MyTuple-new
MyTuple-init
self: (1, 2)
<class '__main__.MyTuple'> (1, 2)
"""

4、set,get,delete

# 描述符 : 允许你自定义在引用一个对象属性时应该完成的事情
# __set__:在设计属性的时候被调用
# __get__:在读取属性的时候被调用
# __delete__:在删除属性的时候被调用
class Descriptor():
    def __get__(self, instance, owner):
        print("get")
    def __set__(self, instance, value):
        print("set")
    def __delete__(self, instance):
        print("delete")
class A():
    x = Descriptor()
a = A()
a.x
a.x = 1
del a.x
"""
get
set
delete
"""

5、描述符实例:属性做类型检查

class Descriptor():
    def __get__(self, instance, owner):
        print("get")
    def __set__(self, instance, value):
        print("set")
    def __delete__(self, instance):
        print("delete")
class A():
    x = Descriptor()
a = A()
a.x
a.x = 1
del a.x
"""
get
set
delete
"""

参考:


面试Python如果你说出这几招,让你瞬间牛叉


相关文章
|
1天前
|
消息中间件 关系型数据库 数据库
Python实时监测数据库表数据变化的方法
在实现时,需要考虑到应用的实时性需求、数据库性能影响以及网络延迟等因素,选择最适合的方法。每种方法都有其适用场景和限制,理解这些方法的原理和应用,将帮助开发者在实际项目中做出最合适的技术选择。
22 17
|
1天前
|
XML 数据格式 Python
Python技巧:将HTML实体代码转换为文本的方法
在选择方法时,考虑到实际的应用场景和需求是很重要的。通常,使用标准库的 `html`模块就足以满足大多数基本需求。对于复杂的HTML文档处理,则可能需要 `BeautifulSoup`。而在特殊场合,或者为了最大限度的控制和定制化,可以考虑正则表达式。
19 12
|
7天前
|
Python
Python中几种lambda排序方法
【9月更文挑战第7天】在Python中,`lambda`表达式常用于配合排序函数,实现灵活的数据排序。对于基本列表,可以直接使用`sorted()`进行升序或降序排序;处理复杂对象如字典列表时,通过`lambda`指定键值进行排序;同样地,`lambda`也适用于根据元组的不同位置元素来进行排序。
|
16天前
|
存储 程序员 Python
Python类的定义_类和对象的关系_对象的内存模型
通过类的定义来创建对象,我们可以应用面向对象编程(OOP)的原则,例如封装、继承和多态,这些原则帮助程序员构建可复用的代码和模块化的系统。Python语言支持这样的OOP特性,使其成为强大而灵活的编程语言,适用于各种软件开发项目。
15 1
|
17天前
|
Python
|
18天前
|
C++ Python
python类方法中使用:修饰符@staticmethod和@classmethod的作用与区别,还有装饰器@property的使用
python类方法中使用:修饰符@staticmethod和@classmethod的作用与区别,还有装饰器@property的使用
12 1
|
18天前
|
算法 定位技术 vr&ar
一文了解PnP算法,python opencv中的cv2.solvePnP()的使用,以及使用cv2.sovlePnP()方法标定相机和2D激光雷达
一文了解PnP算法,python opencv中的cv2.solvePnP()的使用,以及使用cv2.sovlePnP()方法标定相机和2D激光雷达
86 0
一文了解PnP算法,python opencv中的cv2.solvePnP()的使用,以及使用cv2.sovlePnP()方法标定相机和2D激光雷达
|
16天前
|
UED Python
探索Python中的魔法方法:打造自定义字符串表示
【8月更文挑战第31天】在Python的世界里,魔法方法是那些以双下划线开头和结尾的特殊方法,它们为类提供了丰富的功能。本文将带你走进这些魔法方法的背后,特别是__str__和__repr__,揭示如何通过它们来定制我们的对象在被打印或转换为字符串时的外观。我们将从基础用法开始,逐步深入到高级技巧,包括继承与重写,最终实现一个优雅的字符串表示方案。准备好了吗?让我们开始这段代码之旅吧!
|
9月前
|
Python
跟我从0学Python——类的继承和多态
类的继承和多态 —— 面向对象编程的扩展与灵活性
|
4月前
|
搜索推荐 Python
Python学习 -- 类的继承
Python学习 -- 类的继承
33 0