廖雪峰python教程学习:获得对象信息、实例变量与类变量

获得对象信息、实例变量与类变量

廖雪峰老师的python教程
拿到对象判断类型的方法

1.type()函数

基本类型和函数都可通过type()函数判断

type(123)
#<class 'int'>
type(abs)
#<class 'builtin_function_or_method'>

2.isinstance()函数

对于class的继承与类的判断,使用type()不再方便,可以使用isinstance()
可以用type()判断,就可以被isinstance()判断

3.dir()函数

想要获得一个对象的所有属性与方法,可以使用此方法

4.get/set/hasattr()函数

顾名思义,三个函数的意义为:
getattr():获取属性
setattr():设置属性
hasattr():判断是否有属性

hasattr(obj, 'x') # 有属性'x'吗?
#True
obj.x
#9
hasattr(obj, 'y') # 有属性'y'吗?
#False
setattr(obj, 'y', 19) # 设置一个属性'y'
hasattr(obj, 'y') # 有属性'y'吗?
#True
getattr(obj, 'y') # 获取属性'y'
#19
obj.y # 获取属性'y'
#19

因为python作为动态语言有其特殊性,即有时候在定义类的属性时容易被篡改,这就涉及到了实例属性与类属性的问题

给实例绑定属性的方式是通过实例变量,或者通过self变量。

类属性是直接在class中定义的变量。

class Student(object):
    def __init__(self, name):
        self.name = name
	name2 = 'Student'

再引入一条因类属性与实例属性混淆而带来的案例:

class Student(object):
    name = 'Student'

s = Student() # 创建实例s
print(s.name) # 打印name属性,因为实例并没有name属性,所以会继续查找class的name属性
#Student
print(Student.name) # 打印类的name属性
#Student
s.name = 'Michael' # 给实例绑定name属性
print(s.name) # 由于实例属性优先级比类属性高,因此,它会屏蔽掉类的name属性
#Michael
print(Student.name) # 但是类属性并未消失,用Student.name仍然可以访问
#Student
del s.name # 如果删除实例的name属性
print(s.name) # 再次调用s.name,由于实例的name属性没有找到,类的name属性就显示出来了
#Student

所以道理很简单,避免变量混淆

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值