Python魔法属性和方法

python中的魔法属性和方法 魔法属性: 首先,我们先谈一谈什么叫做魔法属性? 魔法属性和方法是Python内置的一些属性和方法,有着特殊的含义。命名时前后加上两个下划线,在执行系统特定操作时,会自动调用。 那么接下来,我们就列举一些常见的魔法属性和方法。 1._init_: 初始化方法,在创建类对象的时候,会自动执行方法 class Student(object): def __init__(self,name,ag... 阅读详情

1.魔法属性

__doc__

获取类或方法的描述信息

class Foo:
    """ 类对象__doc__的属性值"""

    def func(self):
        """ 类方法的__doc__属性值 """
        pass


foo = Foo()

print("类对象的__doc__:", Foo.__doc__)
print("实例对象的__doc__:", foo.__doc__)
print("实例对象方法的__doc__:", foo.func.__doc__)

在这里插入图片描述

__moudle__

获取操作的所属模块,当模块在当前执行文件中时,显示__main__

class Foo:
    """ 类对象__doc__的属性值"""

    def func(self):
        """ 类方法的__doc__属性值 """
        pass


foo = Foo()

print("类对象的__module__:", Foo.__module__)
print("实例对象的__module__:", foo.__module__)
print("实例对象方法的__module__:", foo.func.__module__)

在这里插入图片描述

__class__

获取操作对象的源对象。多用于通过实例对象反向获取类对象

class Foo:
    """ 类对象__doc__的属性值"""

    def func(self):
        """ 类方法的__doc__属性值 """
        pass

    @classmethod
    def cls_func(cls):
        print("cls方法被调用")


foo = Foo()

print("类对象的源引用为Type元类:", Foo.__class__)
print("实例对象的源引用为Foo类对象:", foo.__class__)
print(Foo)

在这里插入图片描述

__name__

获取类或方法的名称

class Foo:
    """ 类对象__doc__的属性值"""

    def func(self):
        """ 类方法的__doc__属性值 """
        pass


foo = Foo()
print("类对象的__name__:", Foo.__name__)
print("实例对象方法的__name__:", foo.func.__name__)

在这里插入图片描述

__dict__

获取类或对象中的所有属性

class Province(object):
    country = 'China'

    def __init__(self, name, count):
        self.name = name
        self.count = count

    def func(self, *args, **kwargs):
        print('func')


# 获取类的属性,即:类属性、方法
print(Province.__dict__)
# 输出:{'__dict__': <attribute '__dict__' of 'Province' objects>, '__module__': '__main__', 'country': 'China', '__doc__': None, '__weakref__': <attribute '__weakref__' of 'Province' objects>, 'func': <function Province.func at 0x101897950>, '__init__': <function Province.__init__ at 0x1018978c8>}

obj1 = Province('山东', 10000)
print(obj1.__dict__)
# 获取 对象obj1 的属性
# 输出:{'count': 10000, 'name': '山东'}

obj2 = Province('山西', 20000)
print(obj2.__dict__)
# 获取 对象obj1 的属性
# 输出:{'count': 20000, 'name': '山西'}

在这里插入图片描述

2.魔法方法

__new__()

为对象分配内存空间,同时还返回对象的引用,在__init__()之前被调用

__init__ ()

初始化实例对象属性的方法,创建实例对象时被调用。

__init__方法中定义的实例属性如果指向的是方法(包括被 property装饰的方法),在实例化时,会立即执行指向的方法,并将return值赋值给实例属性。当实例属性被多次调用时,也不会去执行指向的方法。

注意:利用该特效可以解决一次赋值多次使用的高耗时场景

class Demo:

    def __init__(self):
        self.excel_info = self.mock_read_excel()
        print("实例化完成")

    def mock_read_excel(self):
        print("读取文件")
        return "excel数据"

    def mock_use_1(self):
        return self.excel_info

    def mock_use_2(self):
        return self.excel_info

    def mock_use_3(self):
        return self.excel_info


if __name__ == '__main__':
    demo = Demo()
    demo.mock_use_1()
    demo.mock_use_2()
    demo.mock_use_3()

在这里插入图片描述

__del__()

当对象在内存中被释放时被调用

注:此方法一般无须定义,因为Python是一门高级语言,程序员在使用时无需关心内存的分配和释放,因为此工作都是交给Python解释器来执行,所以,__del__的调用是由解释器在进行垃圾回收时自动触发执行的。

class Foo:
    def __del__(self):
        pass
__call__()

对象后面加括号,触发执行

注:__init__方法的执行是由创建对象触发的,即:对象 = 类名() ;而对于 __call__ 方法的执行是由对象后加括号触发的,即:对象() 或者 类()()

class Foo:
    def __init__(self):
        pass

    def __call__(self, *args, **kwargs):
        print('__call__')


obj = Foo()  # 执行 __init__
obj()  # 执行 __call__
__str__ ()

如果一个类中定义了__str__方法,那么在打印 对象 时,默认输出该方法的返回值。

class Foo:
    def __str__(self):
        return 'laowang'


obj = Foo()
print(obj)
# 输出:laowang
__getitem__(),__setitem__(),__delitem__()

用于索引操作,如字典。以上分别表示获取、设置、删除数据

class Foo(object):

    def __getitem__(self, key):
        print('__getitem__', key)

    def __setitem__(self, key, value):
        print('__setitem__', key, value)

    def __delitem__(self, key):
        print('__delitem__', key)


obj = Foo()

result = obj['k1']      # 自动触发执行 __getitem__
obj['k2'] = 'laowang'   # 自动触发执行 __setitem__
del obj['k1']           # 自动触发执行 __delitem__
__setattr__()、__getattr__()
  • __setattr__():定义属性时被调用。包括外部和内部

  • __getattr__():如果类中不定义该方法,在获取不存在的实例属性时会报 AttributeError;如果定义了该方法,当获取未被定义的属性时执行该方法,如果成功获取到属性则不执行该方法。

class Province(object):

    def __init__(self):
        self.v = "test"     # 在内部,每一次定义实例属性都会调用 __setattr__ 方法
        a = self.s          # 在内部,每一次获取实例属性但属性不存在时调用 __getattr__ 方法
        print("a变量的值为 " + a)
        b = self.v
        print("b变量的值为 " + b)

    def __setattr__(self, key, value):
        print("定义实例属性时被调用")
        super(Province, self).__setattr__(key, value)

    def __getattr__(self, item):
        print("当获取未被定义的属性时执行该方法,如果获取到属性则不调用该方法")
        return "null"


print("===================实例化")
t = Province()
#学习中遇到问题没人解答?小编创建了一个Python学习交流群:711312441
print("===================外部设置实例属性")
setattr(t, "c", "test1234")
t.d = "test2234"

print("===================外部获取实例属性")
print(t.v)
print(getattr(t, "d"))
print(t.ssss)   # 获取不存在的属性
print(getattr(t, "fffff"))  # 获取不存在的属性

在这里插入图片描述

__iter__()

让一个对象变得可以迭代

__next__()

定义一个迭代器,让其能够通过next(迭代对象的迭代器)对一个可迭代对象进行迭代

__enter__(),__exit__()

用于定义上下文管理器

Python 魔法方法与属性 python的魔法方法很奇特,有些地方也称他为特殊方法。其结构是由两个下划线(“_”开始中间名称最后以两个下划线(“_”)结束的特殊指定方法,这有点类似java中的接口和abstract,是python中定义的一种规则,一种玩法。这也是python与java对于方法重写的一个较大的不同的地方.Java中我们可能会为了实现某种或某类相似的动作行为(action),从而使用接口式编程,抽象方法来抽象实现 阅读详情

相关推荐

Python中的魔法属性

被双下划线__包裹住的魔法方法、属性__,可能看起来不是很有用,但是一旦你需要它们,你会感到庆幸它们的存在。

qq_43629857的博客 3725

Python---魔术属性

通过一些方法,获取类或者对象的内部属性

weixin_73888239的博客 322

别再问“这游戏啥引擎做的”了,手把手教你用SteamDB一键查询(附实战案例)

本文详细介绍了如何使用SteamDB一键查询游戏引擎信息,包括Unity 3D、Unreal Engine等热门引擎的识别方法。通过实战案例和高级查询技巧,帮助玩家快速获取游戏技术底细,优化游戏体验和兼容性分析。

weixin_31412781的博客 811

Python基础——魔法方法(一)

Python中的魔法方法

薛定谔的猫的博客 1万+

[RK3588从入门到精通] 专栏目录及介绍

[RK3588从入门到精通] 专栏目录及介绍

nb124667390的博客 6495

CTF实战:Flask Session流量解密与内存马路由追踪

本文通过一道CTF实战题目,详细解析了Flask Session流量解密与内存马路由追踪的全过程。文章从破解前端加密密码入手,逐步揭示如何利用泄露的SECRET_KEY解密Session,发现命令执行痕迹,并最终追踪到攻击者植入的内存马路由。内容涵盖Wireshark流量分析、flask-unsign工具使用等实战技巧,为CTF选手和安全研究人员提供了一套完整的Flask应用安全分析思路。

weixin_28309571的博客 305

Python 中的魔法函数和魔法属性

Python 中的魔法函数,也被称为特殊方法或双下划线方法,是 Python 中一些特殊命名的函数,它们以双下划线开头和结尾。这些函数定义了对象在特定情况下的行为,例如创建、比较、运算、迭代等。魔法函数主要是为某些特殊需求而设计的。例如__str__() 和__repr__() 函数用于打印输出对象的信息,__add__() 函数用于定义两个对象相加的行为,__len__() 函数定义当被 len() 调用时的行为等。

Looking的网页备忘录和个人知识库 1152

Depth Anything 3实战:如何用DINOv2 Transformer一键生成3D高斯点云?

本文详细介绍了Depth Anything 3(DA3)模型如何利用DINOv2 Transformer架构,实现从单张或多视角图像一键生成高质量3D高斯点云。DA3通过统一的深度-射线表示和自适应注意力机制,简化了传统复杂的3D重建流程,并可直接微调用于3D高斯渲染,为图形学、CV和内容创作领域提供了高效的端到端解决方案。

postgres8guard的博客 722

Python单例模式&魔法方法or属性

类属性是公共的,它被定义在类层面而非实例层面,所有类的实例都可以共享访问这个属性。例如,在一个Student类中定义class_name="高三一班"作为类属性,那么所有Student的实例都能访问到这个班级名称。类属性可以通过类名直接访问(如Student.class_name),也可以通过实例访问(如student1.class_name)。所有类的实例方法、静态方法和类方法都能访问到这个属性。静态方法不需要访问类属性,因为静态方法和类、对象没有关联,它更像是一个独立于类的普通函数。

2403_88666941的博客 1208

vue2/3 - 详细对接海康监控实时视频预览和录像回放功能,vue接入使用海康视频监控播放器实时推流等功能,支持hik/rtsp/rtmp/hls/ws取流协议(详细教程与示例代码,一键复制开箱即用

vue2,vue3,海康,vue海康视频监控,海康开放平台,如何接入海康的实时监控,海康威视,Vue实现海康监控视频播放,vue3对接海康视频监控播放、回放的方法流程,实现海康H5视频插件播放视频的实例,web网页接入海康,海康威视的视频vue的录像回放和实时预览,前端vue3项目接入海康威视h5player.js播放器,vue2接入海康威视视频监控平台,使用海康监控H5视频播放,对接海康视频监控,海康视频web插件,web前端在vue中通过海康插件嵌入视频,实现实时预览,vue3海康监控播放器组件,vue

✅ 精选推荐文章 1万+

【ComfyUI】Wan2.2 Animate 背景保留动作迁移视频生成

本文介绍了一个基于ComfyUI的高精度视频生成工作流"Wan2.2 Animate",该系统融合动作捕捉、图像拼接和LoRA加权等技术,能自动识别人脸并完成精准动作迁移,同时保持背景稳定。工作流采用模块化设计,包含输入提取、图像融合、模型加载等关键节点,核心模型Wan2.2-Animate-14B支持fp8精度与BlockSwap控制。流程分为图像输入、动作提取、多图合成等五个阶段,通过文本提示编码器和图像语义编码器实现语义驱动的动作生成,最终输出高质量视频,适用于虚拟形象驱动和

Mr数据杨 2255

Python魔法方法、魔法属性

magic method 魔法方法 Magic attribute 魔法属性

wei_xin_182312 322

【CanMV K210】AI 视觉 MNIST 手写数字识别与分类推理

本文介绍了基于CanMV K210开发板的MNIST手写数字识别实验。实验通过摄像头采集图像,经过开窗、灰度化、缩放、反色等预处理后,使用KPU神经网络加速器运行MNIST分类模型,最终在LCD上显示识别结果。重点讲解了分类模型与检测模型的区别、图像预处理流程以及KPU推理结果的解析方法。实验帮助理解从图像采集到分类输出的完整AI视觉处理链路,并提供了调试思路和硬件连接说明。

Mr数据杨 364

python常用魔法方法_python进阶之类常用魔法方法和魔法属性

前言前面我们总结过了python的关键字、运算符、内置函数、语法糖等与python魔法方法之间的关系,现在我们更细一点,看看python的面向对象编程有哪些常用的魔法属性和魔法方法。魔法属性对于一个类,python定义了许多可用的魔法属性,有些每个类都默认存在,有些需要用户手动定义。__dict____dict__属性可以说是一个类最常用的属性之一了,它又分为类的__dict__属性和实例的__d...

weixin_39821378的博客 130

基于FPGA的车道线检测系统设计

本文设计了一种基于FPGA的车道线检测系统,采用Altera Cyclone IV EP4CE10F17C8作为主控芯片,结合OV7725摄像头和LCD显示屏实现实时车道线检测。系统通过硬件流水线处理架构,依次完成图像采集、灰度转换、中值滤波、Sobel边缘检测和Hough变换直线识别等功能模块。所有模块均采用Verilog HDL实现,充分利用FPGA的并行处理能力,显著提升了系统响应速度。测试结果表明,该系统能够有效检测道路车道线,满足实时性要求,为ADAS系统提供了一种高效的硬件解决方案。

huanghm88的专栏 121

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

python魔法方法和普通方法_Python魔法方法之属性访问详解!

练习要求:写一个矩形类,默认有宽和高两个属性。如果为一个叫square的属性赋值赋值,那么说明这是一个正方形,值就是正方形的边长,此时宽和高都应该等于边长。技术分析我们先来看看有关于属性的四个魔法方法:getattr(self, name): 定义当用户试图获取一个不存在的属性时的行为。getattribute__(self, name)`:定义当该类的属性被访问时的行为(先调用该方法,查看是否存...

weixin_39980298的博客 123

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Python_魔法属性和方法

在接下来的文章中,我将与大家伙一起探讨Python编程语言中的魔法属性和方法。 Python作为一门功能强大且灵活的编程语言,提供了许多特殊的属性和方法,被称为“魔法属性和方法”。 这些特殊的属性和方法可以帮助我们实现更高级的功能,例如操作对象属性、修改类行为以及自定义运算符等。 无论你是初学者还是有经验的开发者,本文将为你详细介绍Python中的魔法属性和方法,并帮助你更好地理解和应用它们。让我们一起往下看吧!

GDYY3721的博客 312

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

[python] python中的魔法方法和属性

Python中的魔法属性和方法为对象提供了特殊的功能。魔法属性如__module__、__class__和__doc__分别表示对象所在的模块、类和描述信息。例如,Sinstance类通过重写__new__方法实现单例模式,其描述信息可通过__doc__属性获取。魔法方法如__str__用于定义对象的字符串表示,__del__在对象删除时调用,__call__使实例对象可像函数一样被调用。例如,enablecall_test类通过定义__call__方法使其实例对象可调用。这些魔法属性和方法增强了Pytho

qq_45280097的博客 437

Python 魔法方法深度解析:从对象创建到属性访问

本文深入解析Python魔法方法(Magic Methods),这些以双下划线包裹的特殊方法(如__init__、__str__等)是Python面向对象编程的核心特性。文章系统介绍了七类关键魔法方法:对象创建(new/init)、字符串表示(str/repr)、比较运算(eq/__lt__等)、容器操作(len/__getitem__等)、属性访问控制(getattr/__setattr__等),通过代码示例演示了单例模式实现、对象比较、容器模拟等典型应用场景。掌握这些方法能让我们编写更符合Python风

weixin_65516460的博客 1117

Python高级语法_魔法属性与构造方法

无论人或事物往往都有不按套路出牌的情况,对于一个类,Python的类属性也是如此,存在着一些具有特殊含义的属性,python定义了许多可用的魔法属性,有些每个类都默认存在,有些需要用户手动定义。

易编橙 · 终身成长社群,相遇已是上上签! 656

python魔法属性魔法方法_技术图文:Python魔法方法之属性访问详解

原标题:技术图文:Python魔法方法之属性访问详解 背景今天在B站学习“零基础入门学习 Python”中的第45节“魔法方法:属性访问”,这也是我们组织的 的学习任务,其中有这样的一个题目。练习要求:写一个矩形类,默认有宽和高两个属性。如果为一个叫square的属性赋值赋值,那么说明这是一个正方形,值就是正方形的边长,此时宽和高都应该等于边长。技术分析我们先来看看有关于属性的四个魔法方法:get...

weixin_39838328的博客 125

Python 属性访问魔法方法

以下所有魔法方法记得左右两边加上两杠下划线 1.getattr(self, name): 定义一个当用户试图获取一个不存在的属性时的行为。 例子: class A: def __init__(self,a,b): self.a = a self.b = b def __getattr__(self,name): print("没有这个属性哦!") c = A(1,2) c.c #输...

uGamemaster的博客 321

Python 语法基础 魔法方法 魔法属性

例如下方A的对象a,正常情况a()会报错,但是有了__call__,当写a()时,会调用call里的内容。打印一个对象是,默认打印内存地址,如果有这个方法,将默认打印这个方法的返回值。__class__只能用对象,用类名.__class__结果永远是type。描述信息,必须紧跟类名或方法名的第一行,不能有空格,只能用三引号。返回类属性 方法的名字和参数 不包含实例属性。返回实例属性的字典,不包含方法,和类属性。把一个不可调用对象转换为可调用对象。__modle__可以用类名调用。

吴梓穆的博客 210

萌新学 Python 之动态绑定属性和方法以及魔法函数

使对象兼容列表、字典的索引和键的操作,把对象当作列表和字典使用,列表还可以进行切片,__getitem__ 当作列表、字典只能进行。:使对象兼容列表、字典的索引和键的操作,把对象当作列表和字典使用,列表还可以进行切片,__setitem__ 当作列表、字典可以进行。:使对象兼容列表、字典的索引和键的操作,把对象当作列表和字典使用,列表还可以进行切片,__delitem__ 当作列表、字典可以进行。当实例属性存在时,修改实例属性值,当实例属性不存在时,添加实例属性,即。当类属性不存在时,添加类属性,即。

m0_58838332的博客 417

Python的静态方法、类方法、属性方法和魔法方法

静态方法 静态方法的作用是可以更好的组织代码,防止代码变大后变得比较混乱。静态方法只是名义上归类管理,实际上在静态方法里访问不了类或则实例中的任何属性 静态方法使用场景 1)我们要写一个只在类中运行而不在实例中运行的方法.   2)经常有一些跟类有关系的功能但在运行时又不需要实例和类参与的情况下需要用到静态方法.   3)比如更改环境变量或者修改其他类的属性等能用到静态方法.   4)这种情况可以直接用函数解决, 但这样同样会扩散类内部的代码,造成维护困难. 调用方式 调用方式: 既可以被类直接调用,也可以

姜枨文的技术博客 857

python魔法属性_python进阶之类常用魔法方法和魔法属性

前言前面我们总结过了python的关键字、运算符、内置函数、语法糖等与python魔法方法之间的关系,现在我们更细一点,看看python的面向对象编程有哪些常用的魔法属性和魔法方法。魔法属性对于一个类,python定义了许多可用的魔法属性,有些每个类都默认存在,有些需要用户手动定义。__dict____dict__属性可以说是一个类最常用的属性之一了,它又分为类的__dict__属性和实例的__d...

weixin_39719101的博客 197
上一篇: Python中使用concurrent执行多进程任务
下一篇: Python基础语法入门教程
Python程序u猿
博客等级 码龄5年 622粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值