Python廖雪峰教程学习笔记:Day10

前言

养成一个好的习惯只需要坚持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
# 测试通过!
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值