python--------------------------模术方法

本文详细介绍了Python的魔术方法,包括特殊属性、魔术方法的分类及其应用,如`__hash__`、`__bool__`、运算符重载、上下文管理等,并通过实例展示了如何在类中实现这些方法,以提升代码的可读性和功能性。
摘要由CSDN通过智能技术生成

特殊属性

属性 含义
name 类,函数,方法等的名字
modeule 类定义所在的模块名
class 对象或类所属的类
bases 类的基类的元组,顺序为它们在基类列表中出现的顺序
doc 类函数的文档字符串,如果没有定义则为None
mro 类的mro,class.mro()返回结果保存在__mro__中
dict 类或实例的属性,可写的字典

查看属性

dir|返回类或者对象的所有成员名称列表dir()函数炒作实例就是调用__dir__().是用实力调用时,如果提供__dir__(),则返回其返回字,要求是可迭代对象.如果没有__dir__().这回从实例和列及祖先类中收集信息
如果dir([obj])参数obj包含方法__dir__(),该方法将被调用.如果参数obj不包含__dir__(),该方法将最大限度地手机属性信息.
dir(obj)对于不同类型的对象obj具有不同的行为:

  • 如果对象是模块对象,返回的列表包含模块的属性名和变量名.
  • 如果对象是类型或者类对象,返回的列表包含类的属性名,及它的基类的属性名.
  • 如果obj不写,返回列表包含内容不同
    • 在模块中,返回模块的列表包含模块的属性名和变量名.
    • 在函数中,返回本地作用域的变量名
    • 在方法中,返回本地作用域的变量名
# animal.py
class Animal:
    x = 123
    def __init__(self, name):
        self.name = name
        self.__age = 10
        self.weight = 20

print(' Animal Module\'s names = {}'.format(dir()))



#Cat.py
import animal

from animal import Animal

class Cat(Animal):
    x = 'cat'
    y = 'abcd'

class Dog(Animal):
    def __dir__(self):
        return ['dog']  #必须返回可迭代对象

print('---------------')
print('Current MOdule\'s name = {}'.format(dir()))
print('animal Module\'s names = {}'.format(dir(animal)))
print("object's __dict__      = {}".format(dir(sorted(object.__dict__.keys()))))
print("Animal's dir()         = {}".format(dir(Animal)))
print("Cat's dir()            = {}".format(dir(Cat)))
print("--------------------")
tom = Cat('tom')
print(sorted(dir(tom)))
print(sorted(tom.__dir__()))

print("Dog's dir = {}".format(dir(Dog)))
dog = Dog('snoppy')
print(dir(dog))
print(dog.__dict__)


运行结果:
 Animal Module's names = ['Animal', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__']
---------------
Current MOdule's name = ['Animal', 'Cat', 'Dog', '__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'animal']
animal Module's names = ['Animal', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__']
object's __dict__      = ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
Animal's dir()         = ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'x']
Cat's dir()            = ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'x', 'y']
--------------------
['_Animal__age', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值