前言
养成一个好的习惯只需要坚持21天,Day10
获取对象信息
判断对象类型,可以使用type()函数:
type(123)
# <class 'int'>
type('apple')
# <class 'str'>
type(None)
# <type(None) 'NoneType'>
如果一个变量指向函数或者类,也可以用type()函数来判断:
type(abs)
# <class 'builtin_function_or_method'>
types模块中有很多定义的常量:
import types
def fn():
	pass
type(fn)==types.FunctionType
# True
type(lambda x:x)==types.LambdaType
# True
使用isinstance()
如果要判断class的类型,可以使用isinstance()函数。day9中在学习继承和多态的时候其中的继承关系是:
object -> Animal -> Dog
首先创建不同类的对象:
a = Animal()
d = Dog()
print(isinstance(d,Dog))
print(isinstance(d,Animal))
# True
# True
还可以直接判断变量类型:
isinstance('abc',str)
# True
使用dir()
如果要获得一个对象的所有属性和方法,可以使用dir()函数,它返回一个包含字符串的list,比如,获得一个str对象的所有属性和方法:
dir('abc')
# ['__add__', '__class__',..., '__subclasshook__', 'capitalize', 'casefold',..., 'zfill']
通过dir()得到的对象属性,可以直接去调用,例如对象中包含有__len__()方法:
print(len('abc'))
# 3
print('abc'.__len__())
# 3
对象的属性和方法可以判断获知,配合getattr()、setattr()以及hasattr(),我们可以直接操作一个对象的状态:
class MyObject(object):
	def __init__(self):
		self.x = 9
	def power(self):
		return self.x * self.x
obj = MyObject
接下来使用getattr()、setattr()以及hasattr()来测试对象的属性:
hasattr(obj,'x')
# True
setattr(obj,'y',19)
hasattr(obj,'y')
# True
getattr(obj,'y')
# 19
实例属性和类属性
给实例绑定属性的方法是通过实例变量,或者通过self变量:
class Student(objet):
	def__init__(self,name):
		self.name = name  #通过self变量绑定name属性
s = Student('Bob')
s.score = 90 # 通过实例变量绑定score属性
如果想要给类绑定一个属性,就可以直接在class类中定义属性:
class Student(object):
    name = 'Student'
接下来,测试类的属性:
s = Student() # 创建实例s
print(s.name) # 打印name属性,实例s没有name属性,就打印class类的name属性
# Student
print(Sudent.name) # 打印类的name属性
# Student
s.name = 'Tom' #  给实例定义name属性
print(Srudent.name) # 类的name属性并未改变
# Student 
练习
为了统计学生人数,可以给Student类增加一个类属性,每创建一个实例,该属性自动增加:
class Student(object):
    count = 0
 
    def __init__(self, name):
        self.name = name
        Student.count+=1
 
    def get_count(object):
        return object.count
# 测试:
if Student.count != 0:
    print('测试失败!')
else:
    bart = Student('Bart')
    if Student.count != 1:
        print('测试失败!')
    else:
        lisa = Student('Bart')
        if Student.count != 2:
            print('测试失败!')
        else:
            print('Students:', Student.count)
            print('测试通过!')
# Students: 2
# 测试通过!
 
                   
                   
                   
                   
                             本文深入探讨了Python中对象的类型判断、属性获取及操作方法,包括使用type()、isinstance()、dir()函数,以及如何利用getattr()、setattr()和hasattr()直接操作对象状态,最后通过实例演示了实例属性和类属性的区别。
本文深入探讨了Python中对象的类型判断、属性获取及操作方法,包括使用type()、isinstance()、dir()函数,以及如何利用getattr()、setattr()和hasattr()直接操作对象状态,最后通过实例演示了实例属性和类属性的区别。
           
       
           
                 
                 
                 
                 
                 
                
               
                 
                 
                 
                 
                
               
                 
                 扫一扫
扫一扫
                     
              
             
                   230
					230
					
 被折叠的  条评论
		 为什么被折叠?
被折叠的  条评论
		 为什么被折叠?
		 
		  到【灌水乐园】发言
到【灌水乐园】发言                                
		 
		 
    
   
    
   
             
            


 
            