标签:instance sel dir 严格 int 直接 方式 增加 练习
1.类和实例
类是创建实例的模板,而实例是一个个具体的对象,每个实例有自己的数据,且相互独立互不影响;
方法是和实例绑定的函数,与普通函数不同,类的方法可以直接访问实例的数据;
通过在实例上调用方法,就可以实现对实例内部数据的操作
和静态语言不同,Python允许对实例变量绑定任何数据,也就是说,对于两个实例变量,虽然它们都是同一个类的不同实例,但拥有的变量名称都可能不同:
Class内部属性如果不想让外部直接访问,可以在变量前加__(两个下划线),如__name,而_name、__name__等都是可以直接访问的。
设置成私有变量不代表不能访问,python解释器在其前边加上了类名,通过这种方式就可以进行访问,如bob._Student__name (bob是类Student的实例)
3.继承和多态:
继承可以利用或重写父类的方法。
当子类和父类都存在相同的run()
方法时,我们说,子类的run()
覆盖了父类的run()
,在代码运行的时候,总是会调用子类的run()
。这样,我们就获得了继承的另一个好处:多态。
这就是动态语言的“鸭子类型”,它并不要求严格的继承体系,一个对象只要“看起来像鸭子,走起路来像鸭子”,那它就可以被看做是鸭子。
Python的“file-like object“就是一种鸭子类型。对真正的文件对象,它有一个read()
方法,返回其内容。但是,许多对象,只要有read()
方法,都被视为“file-like object“。许多函数接收的参数就是“file-like object“,你不一定要传入真正的文件对象,完全可以传入任何实现了read()
方法的对象。
4.获取对象信息:
type(),types,dir(),isinstance(),getattr(),settattr(),hasattr()
总是优先使用isinstance()判断类型,可以将指定类型及其子类“一网打尽”。
getattr(),settattr(),hasattr()可以判断实例中是否存在相应变量、方法,并且可以填写相应的变量和方法。
5.类属性和实例属性
实例可以通过bob.name 或setattr()等方式添加属性,而类可以通过类内代码增加属性,如果类和实例属性同名那优先调用实例的属性。
#练习题 为了统计学生人数,可以给Student类增加一个类属性,每创建一个实例,该属性自动增加:
class Student(object):
count = 0
def __init__(self,name):
self.name = name
Student.count = Student.count+1 # 注意是类Student.count而不是实例selt.count
a = Student(‘bob‘)
print(Student.count)
a = Student(‘bob‘)
print(Student.count)
a = Student(‘bob‘)
print(Student.count)
标签:instance sel dir 严格 int 直接 方式 增加 练习
原文地址:https://www.cnblogs.com/wuchenggong/p/8797541.html