失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Python面向对象加强2.Python 中类的内置属性和内置方法(魔法函数)

Python面向对象加强2.Python 中类的内置属性和内置方法(魔法函数)

时间:2020-10-16 15:11:40

相关推荐

Python面向对象加强2.Python 中类的内置属性和内置方法(魔法函数)

Python面向对象加强2.Python 中类的内置属性和内置方法(魔法函数)

一、内置属性1. __doc__:获取类的注释*2. __dict__:将对象(类)的所有属性和方法以字典获取*3. __slots__:限制对象可以设置的属性。4. __class__:获取对象所在的类二、内置方法(魔法函数)1. __init__2.__str__ 和 __repr__3. __call__

一、内置属性

1.doc:获取类的注释

class Person:"""这是人的类"""age = 19print(Person.__doc__)

*2.dict:将对象(类)的所有属性和方法以字典获取

class Person:"""这是人的类"""age = 19p=Person()p.age=18print(p.__dict__)

*3.slots:限制对象可以设置的属性。

class Person:"""这是人的类"""__slots__ = ["name", "age"]p = Person()p.age = 18p.name = 'lihua'print(p.age, p.name)p.sex = "man"print(p.sex)

4.class:获取对象所在的类

class Person:"""这是人的类"""age = 19def __init__(self):self.name = "sz"def run(self):print("run")p=Person()print(p.__class__)

二、内置方法(魔法函数)

1.init

在调用类时自动触发,通过object类产生的空对象自动调用__init__(),重写__init__方法可以控制对象的初始化过程。

2.strrepr

两者的目的都是为了显式的显示对象的一些必要信息,方便查看和调试。__str__被print默认调用,__repr__被控制台输出时默认调用。即,使用__str__控制用户展示,使用__repr__控制调试展示。

str() 的输出追求可读性,输出格式要便于理解,适合用于输出内容到用户终端。

repr() 的输出追求明确性,除了对象内容,还需要展示出对象的数据类型信息,适合开发和调试阶段使用。

class Person:def __init__(self,name,age):self.name = nameself.age = agedef __str__(self):return f"姓名是{self.name},年龄{self.age}岁"p1 = Person("小明",18)print(p1.name,p1.age)print(p1)

3.call

__call__使“对象”具备当做函数来调用的能力,换句话来说,__call__方法提供给对象可以被执行的能力,就像函数那样,而本质上,函数就是对象,函数就是一个拥有__call__方法的对象。

来看实例:

class Person:passp = Person()p()

由上图可知,对象不能像函数那样调用。如果使用__call__方法:

class Person:def __call__(self, *args, **kwargs):print("xxx")p = Person()p()

对象就可以像函数那样调用。

同时也可以传递多值参数:

class Person:def __call__(self, *args, **kwargs):print("xxx",args,kwargs)p = Person()p(123,456,name="sz",sex="man")

关于call的应用场景

class PenFactory:def __init__(self, p_type):self.p_type = p_type # 这个类只有一个属性def __call__(self, p_color):print("创建了一个%s类型的画笔,他是%s颜色的" % (self.p_type, p_color))gangbiF = PenFactory("钢笔") # 创建一个对象gangbiF('红色')gangbiF('黄色')gangbiF('绿色')

call()方法能够非常方便的实现装饰器。以下是一个简单的装饰器的例子:

class ClsDeco:def __init__(self, func):self.func = funcdef __call__(self, *args, **kwargs):print(f'Running {self.func.__name__}')self.func()print('End')@ClsDeco # 等价于 bar = ClsDeco(bar)def foo():print('do something')foo()

如果觉得《Python面向对象加强2.Python 中类的内置属性和内置方法(魔法函数)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。