python基础之类中常见内置方法

一、__del__(self): 对象消失的时候调用此方法。

>>> class cat(object):
	def __del__(self):
		print("对象消失")

>>> import sys
>>> cat1=cat()            #创建一个cat1
>>> sys.getrefcount(cat1) #测试对象的引用个数,比实际大1,此时为2
2
>>> cat2=cat1             #又创建了一个引用,此时为3
>>> sys.getrefcount(cat1)
3
>>> sys.getrefcount(cat2)
3
>>> del cat1              #删除了一个引用,cat1 不在指向对象,cat2还指向对象,此时引用个数为2
>>> sys.getrefcount(cat2)
2
>>> del cat2              #又删除了一个,此时没有引用指向对象,对象消失,调用__del__()方法
对象消失

二、类方法 @classmethod

>>> class test(object):
	def show(self):
		print("This is a class")
	@classmethod  #定义类方法
	def way(cls):
		print("This is a class method")
>>> a=test()
>>> a.way()  #用对象调用类方法
This is a class method
>>> test.way()   #用类调用类方法
This is a class method

三、静态方法:@staticmethod ,一般用于既和类没关系也和对象没关系的使用

>>> class test(object):
	def show(self):
		print("This is a class")
	@staticmethod  #定义静态方法
	def way( ): #可以没有参数
		print("This is a static method")
>>> a=test() 
>>> a.way()  #对象调用
This is a static method
>>> test.way()  #类调用
This is a static method

四、__new__( )方法:静态方法,用于创建对象,__init__( )用于对象的初始化

>>> class test(object):
	def show(self):
		print("This is show function")	
>>> a=test()  #调用__new__()方法来创建对象,然后用一个变量来接收__new__()方法的返回值,这个返回值是创建出来对象的引用。调用__init__()方法来初始化对象。

子类中重写__new__( )方法,要调用父类__new__( )方法,要返回对象的引用,对象才能被创建。 

重写__new__( )方法,可以创建单例

<一>没返回,没调用父类__new__()方法
>>> class shit(object):
	def show(self):
		print("-----show----")
	def __new__(cls):
		print("重写new方法")
>>> a=shit()
重写new方法
>>> a.show() #没有调用父类__new__(cls)方法,报错
Traceback (most recent call last):
  File "<pyshell#11>", line 1, in <module>
    a.show()
AttributeError: 'NoneType' object has no attribute 'show'
<二> 调用父类的__new__(cls)方法,没有返回
class shit(object):
	def show(self):
		print("-----show----")
	def __new__(cls):
		print("重写new方法")
		object.__new__(cls)		
>>> a=shit()
重写new方法
>>> a.show()
Traceback (most recent call last):
  File "<pyshell#21>", line 1, in <module>
    a.show()
AttributeError: 'NoneType' object has no attribute 'show'
<三> 有返回,调用父类__new__()方法
>>> class shit(object):
	def show(self):
		print("-----show----")
	def __new__(cls):
		print("重写new方法")
		return object.__new__(cls)  #调用父类的__new__(cls)方法
>>> a=shit()
重写new方法
>>> a.show()
-----show----

五、__slots__方法:限制对象动态添加属性和方法

>>> class student(object):
	__slots__=["name","age"]               #添加限制
	def __init__(self,stuName,stuAge):
		self.name=stuName
		self.age=stuAge	
>>> student.Persons=100                    #对类没有限制
>>> stu1=student("ma dongmei",17)
>>> stu1.gender="girl" 
                                           #不可以为对象添加属性,报错
Traceback (most recent call last):
  File "<pyshell#18>", line 1, in <module>
    stu1.gender="girl"
AttributeError: 'student' object has no attribute 'gender'

对于__slot__有以下几个需要注意的地方:

  • __slots__只对对象进行限制,不对类进行限制
  • __slots__不仅限制类对象的属性,还限制类对象的方法
  • __slots__仅对当前类起作用,对继承的子类不起作用
  • 在子类中定义__slots__,子类允许定义的属性就是自身的__slots__加上父类的__slots__
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python学习资料学习课件python基础源码: 001我和Python的第一次亲密接触 002用Python设计第一个游戏 003小插曲之变量和字符串 004改进我们的小游戏 005闲聊之Python的数据类型 006Pyhon之常用操作符 007了不起的分支和循环 008了不起的分支和循环2 009了不起的分支和循环3 010列表:一个打了激素的数组 011列表:一个打了激素的数组2 012列表:一个打了激素的数组3 013元组:戴上了枷锁的列表 014字符串:各种奇葩的内置方法 015字符串:格式化 016序列!序列! 017函数:Python的乐高积木 018函数:灵活即强大 019函数:我的地盘听我的 020函数:内嵌函数和闭包 021函数:lambda表达式 022函数:递归是神马 023递归:这帮小兔崽子 024递归:汉诺塔 025字典:当索引不好用时 026字典:当索引不好用时2 027集合:在我的世界里,你就是唯一 028文件:因为懂你,所以永恒 029文件:一个任务 030文件系统:介绍一个高大上的东西 031永久存储:腌制一缸美味的泡菜 032异常处理:你不可能总是对的 033异常处理:你不可能总是对的2 034丰富的else语句及简洁的with语句 035图形用户界面入门:EasyGui 036类和对象:给大家介绍对象 037类和对象:面向对象编程 038类和对象:继承 039类和对象:拾遗 040类和对象:一些相关的BIF 041魔法方法:构造和析构 042魔法方法:算术运算 043魔法方法:算术运算2 044魔法方法:简单定制 045魔法方法:属性访问 046魔法方法:描述符(Property的原理) 047魔法方法:定制序列 048魔法方法:迭代器 049乱入:生成器 050模块:模块就是程序 051模块:__name__='__main__'、搜索路径和包 052模块:像个极客一样去思考 053论一只爬虫的自我修养 054论一只爬虫的自我修养2:实战 055论一只爬虫的自我修养3:隐藏 056轮一只爬虫的自我修养4:OOXX 057论一只爬虫的自我修养5:正则表达式 058论一只爬虫的自我修养6:正则表达式2 059论一只爬虫的自我修养7:正则表达式3 060论一只爬虫的自我修养8:正则表达式4 061论一只爬虫的自我修养9:异常处理 062论一只爬虫的自我修养10:安装Scrapy 063论一只爬虫的自我修养11:Scrapy框架之初窥门径 064GUI的终极选择:Tkinter 065GUI的终极选择:Tkinter2 066GUI的终极选择:Tkinter3 067GUI的终极选择:Tkinter4 068GUI的终极选择:Tkinter5 069GUI的终极选择:Tkinter6 070GUI的终极选择:Tkinter7 071GUI的终极选择:Tkinter8 072GUI的终极选择:Tkinter9 073GUI的终极选择:Tkinter10 074GUI的终极选择:Tkinter11 075GUI的终极选择:Tkinter12 076GUI的终极选择:Tkinter13 077GUI的终极选择:Tkinter14 078Pygame:初次见面,请大家多多关照 079Pygame:解惑 080Pygame:事件 081Pygame:提高游戏的颜值1 082Pygame:提高游戏的颜值2 083Pygame:提高游戏的颜值3 084Pygame:基本图形绘制 085Pygame:动画精灵 086Pygame:碰撞检测 087Pygame:播放声音和音效 088Pygame:摩擦摩擦 089Pygame:游戏胜利 090Pygame:飞机大战1 091Pygame:飞机大战2 092Pygame:飞机大战3 093Pygame:飞机大战4 094Pygame:飞机大战5 095Pygame:飞机大战6 096Pygame:飞机大战7

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值