鱼c笔记——类和对象相关BIF

①issubclass(class, classinfo) 若第一个参数是第二个参数的子类,则返回True

说明:1>这种检查是非严格性的检查,是一种宽松的检查,也就是说一个类被认为是其自身的子类;

2> classinfo可以是类对象组成的元组,只要class是其中任何一个候选类的子类,则返回True


②isinstance(object, classinfo) 检查一个实例对象是否属于一个类,是返回True

注意:1>如果第一个参数不是对象,则永远返回False

2>如果第二个参数不是类或者由类对象组成的元组,则会抛出一个TypeError的异常



以前我们都是通过.操作符来访问对象的属性,下面Python提供4种方法能让我们更加斯文的访问对象的属性:

attr = attribute: 属性

③hasattr(object, name) 测试一个对象object是否有指定的属性name,属性名要用表示字符串的双引号括起来。

>>> class C:
	def __init__(self, x = 0):
		self.x = x

		
>>> c1 = C()
>>> hasattr(c1, x)
Traceback (most recent call last):
  File "<pyshell#69>", line 1, in <module>
    hasattr(c1, x)
NameError: name 'x' is not defined
>>> hasattr(c1, 'x')                     #注意要用表示字符串的引号括起来
True

④getattr(object, name[, default]) 返回对象指定的属性值,如果指定的参数不存在,(如果default有设置)会将default的内容打印出来,(没设置)抛出一个AttributeError的异常

>>> getattr(c1, 'x')
0

>>> getattr(c1, 'y')
Traceback (most recent call last):
  File "<pyshell#72>", line 1, in <module>
    getattr(c1, 'y')
AttributeError: 'C' object has no attribute 'y'

>>> getattr(c1, 'y', '您所访问的参数不存在')      #用户体验更好
'您所访问的参数不存在'

⑤setattr(object, name, value) 设置对象中指定属性的值,如果指定属性不存在,则会新建一个属性,并给他赋值。同样name的也要写成字符串的形式。

>>> setattr(c1, 'y', '我出世了!')

>>> getattr(c1, 'y', '您所访问的参数不存在')
'我出世了!'

⑥delattr(object, name)删除对象中指定的属性,如果指定的属性不存在,则抛出AttributeErro的异常

>>> delattr(c1, 'y')

>>> delattr(c1, 'y')                 #可以先用hasattr()检测是否存在,再删除
Traceback (most recent call last):
  File "<pyshell#77>", line 1, in <module>
    delattr(c1, 'y')
AttributeError: y



⑦property(fget=None, fset=None, fdel=None, doc=None) 通过属性来设置属性,返回值是一个属性.

该函数的作用是设置一个属性,这个属性的作用是设置定义好的属性。第一个参数必须是获取属性的方法,第二个参数必须是设置属性的方法,第三个参数是删除属性的方法

用途:当想修改下例中的setSize等的方法名时,只用在类里面最修改,而不用去改类外面的参数了。


>>> class C:
	def __init__(self, size = 10):
		self.size = size
	def getSize(self):       #具体怎么获取可以自己写,写完后再传给property()
		return self.size
	def setSize(self, value):
		self.size = value
	def delSize(self):
		del self.size
	x = property(getSize, setSize, delSize)

	
>>> c1 = C()

>>> c1.x                   #原来得通过getSize()获取size的值,现在可以直接访问x
10                         #c1.x会执行第一个参数里的内容

>>> c1.x = 18              #原来得通过setSize()修改size的值,现在可以这样修改
>>> c1.getSize()           #c1.x=  会执行第二个参数里面的内容
18

>>> del c1.x               #原来得通过delSize()删除size,现在可以通过删除x做到
>>> c1.size
Traceback (most recent call last):
  File "<pyshell#97>", line 1, in <module>
    c1.size
AttributeError: 'C' object has no attribute 'size'


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值