首页 > 其他分享 >new魔术方法

new魔术方法

时间:2024-03-16 23:33:56浏览次数:19  
标签:__ obj name 魔术 print new 方法 cls

New

'''
	触发时机:实例化类生成对象的时候触发(触发时机在__init__之前)
	功能:控制对象的创建过程
	参数:至少一个cls接受当前的类,其他根据情况决定
	返回值:通常返回对象或None
'''

基本使用

class MyClass2():
	a = 100
obj2 = MyClass2()
# print(obj2)

class MyClass1():
	def __new__(cls):
		print(cls)	# 是Myclass1 本身	
		# 1.返回本类对象
		"""类.成员方法(类)"""
		return object.__new__(cls)
		# 2.返回其他类的对象
		return obj2
		# 3.不返回对象,None
		return None		
	
obj = MyClass1()
# print(obj.a) 	# 2.返回其他类的对象
print(obj)

new 触发时机要快于 init

"""
__new__  创建对象
__init__ 初始化对象
"""
class MyClass():

	def __new__(cls):
		print(1)
		return object.__new__(cls)

	def __init__(self):
		print(2)
	
obj = MyClass()	

# out 先 1  后 2

__new__的参数要和__init__参数一一对应

"""
例如 obj = MyClass())
Python 首先调用 MyClass.__new__() 方法来创建一个新的实例对象,因为本身你创建时候会有对象 所以必须参数一致,然后再调用 MyClass.__init__() 方法来初始化这个实例对象。
"""

class Boat():
	def __new__(cls,name):
		return object.__new__(cls)
	
	def __init__(self,name):
		self.name  = name

obj = Boat("万里阳光号")
print(obj.name)



# *args,**kwargs 可以收集多余的所有参数
class Boat():
	# *args,**kwargs 可以收集多余的所有参数
	def __new__(cls,*args,**kwargs):
		return object.__new__(cls)
	
	def __init__(self,name,type):
		self.name  = name
		self.type = type

obj = Boat("万里阳光号","破木头做的")
print(obj.name , obj.type)

__new__和__init__之间的注意点

"""
如果__new__ 没有返回对象或者返回的是其他类的对象,不会调用构造方法.
只有在返回自己本类对象的时候,才会调用构造方法.
"""
class Children():
	def __new__(cls,*args,**kwargs):
		return obj2
		# pass
		
	def __init__(self,name,skin):
		print("构造方法被触发 ... ")
		# self.name = name
		# self.skin = skin
		
obj = Children("灭霸","紫薯")

# print(obj.name) error
# print(obj.skin) error

标签:__,obj,name,魔术,print,new,方法,cls
From: https://www.cnblogs.com/wbcde116/p/18077888

相关文章

  • 证明正弦定理的多种方法
    证明正弦定理的方法方法汇总第一种最简单的方法过点\(A\)作\(AH\perpBC\)交\(BC\)于点\(H\),易得:\[AH=c\sinB=b\sinC\\\Downarrow\\\dfrac{c}{\sinC}=\dfrac{b}{\sinB}\]同理可得:\[\dfrac{a}{\sinA}=\dfrac{b}{\sinB}\]\[\dfrac{c}{\sinC}=\df......
  • 图片超过容器溢出的几种解决方法(实现图片缩放)
    网页插入图片的两种常见应用场景在网页编写,我们经常会插入图片来优化网页整体结构,增强用户体验感,在插入图片时,我们会有两种比较常见的应用场景,一种就是使用background-image属性插入背景图片,还有一种是使用img标签插入图片。使用background-image属性插入背景图片当插入......
  • 图像处理ASIC设计方法 笔记10 插值算法的流水线架构
    (一)三次插值算法实现的图像旋转设计的流水线架构传统上,三次插值算法实现的图像旋转设计需要三块一样的处理资源,为了节约资源,采用流水线设计,简单来讲就是三次插值算法共用一块资源,优化这部分使用的存储器结构,以达成流水线的目标。插值算法最直接的是需要DFF模块,现在对它进......
  • 政安晨:【深度学习处理实践】(八)—— 表示单词组的两种方法:集合和序列
    咱们接着这个系列的上一篇文章继续:政安晨:【深度学习处理实践】(七)——文本数据预处理https://blog.csdn.net/snowdenkeke/article/details/136697057机器学习模型如何表示单个单词,这是一个相对没有争议的问题:它是分类特征(来自预定义集合的值),我们知道如何处理。它应该被编码......
  • 在 Ubuntu 和 Linux Mint 上更改运行级别的简单方法
    在Ubuntu和LinuxMint等基于Linux的操作系统中,运行级别(runlevel)是指系统的工作状态或运行模式。每个运行级别都对应着一组特定的服务和进程,用于满足用户或系统的不同需求。通过更改运行级别,用户可以控制系统启动时所加载的服务和进程,从而实现定制化的系统配置。运行......
  • 什么是构造方法
    /*构造方法什么是构造方法?方法名和类名相同,和普通方法的格式不一样的特殊方法构造方法的定义格式?修饰符类名(形参){执行语句}构造方法的作用?1,用来创建对象2,......
  • [GFCTF 2021]where_is_shell :)shell use new posture
    [GFCTF2021]where_is_shellshell的特殊姿势看上去很简单的栈溢出,但是问题在于找不到能用的/bin/sh或者sh这里出现了一个shell的新姿势:可以利用system($0)获得shell权限,$0在机器码中为\x24\x30在tips函数中正好有\x24\x30可以用来构造,所以需要取出0x400541关于ida打......
  • 如果本电脑中无pip指令,则可以按下面方法即可安装pip及运行它
    第一步:点击下面网址:https://pypi.org/project/pip/#files该网址下载tar文件,并解压到一个磁盘里Win+R键打开cmd,cd到解压磁盘的目录,运行命令:python setup.py install第二步:我Python安装的目录是:C:\Users\天天开心那是必须滴\AppData\Local\Programs\Python\Python39\S......
  • 用wireshark抓取HTTP的get和post方法流量包
    任务1:下载安装WireShark网络抓包分析工具,并分别用该工具抓取HTTP的get和post两种页面的网络流量包,并将HTTP的request和response里相应各信息内容抓取在实验报告里并解释各内容的功能和含义。打开wireshark,开始抓包。抓HTTP的包在搜索框中搜索HTTP即可,request和response分开搜......
  • 方法的重载
    publicclassday_5_2{publicstaticvoidmain(String[]args){/*方法的重载(overload)什么是方法的重载是指在同一个类中,出现两个方法的名字相同,参数列表不同(参数的个数不同,数据类型不同,对应的顺序位置不同)的两个方法,就称之为方法的重载......