面向对象编程
对象:包含数据和操作数据的函数
面向对象编程:把计算机程序视为一组对象的集合,每个对象可以接收其他对象的消息,并处理这些消息。
类:抽象的概念(即包含数据,又包含操作数据的方法)
实例:类中的具体对象
class Student(object): pass
class后面是类名,通常以大写字母开头,括号里表示从那个类继承,没有合适的继承类,就使用object,所有类最终都会继承它
创建实例
someone = Student() someone.name = "zhangsan"
someone即为一个实例,可以给它增加属性,如name
class Student(object): def __init__ (self,name,score): self.name = name self.score = score #实例的score属性等于参数score的值
创建实例时必须传入参数,self代表其本身,python解释器会自己把实例变量传入
数据封装
在类内部定义函数访问数据,即把“数据”封装,也称为类的方法
将类的数据和方法都封装在类中,外部只需要按要求调用即可,不需要知道类内部是如何实现的
调用:someone.print_score()
参数如同正常函数参数设计,依据类中函数,调用时可传入必要的参数
实例变量名称可以不同
访问限制
class Student(object): def __init__(self,name,score): self.__name = name self.__score = score def print_name(self): print("%s:%s" % (self.__name,self.__score)) def get_name(self): return self.__name def set_score(self): self.__score = score bart = Student("some one",23456) # bart.print_name() # bart.__name = "a" # bart.print_name() # print(bart.__name) # bart.get_name()
继承
子类继承父类,获得父类全部功能
当子类与父类函数名相同,子类将覆盖父类函数,在代码运行时,总是调用子类函数
返回类信息
获取对象类型 type()
import types def fn(): pass type(fn) == types.FunctionType
类型首字母大写
isinstance()判断对象是否是某种类型
子类属于父类
isinstance([1,2,3],(list,tuple)) 判断变量是否是某些类型中的一种
>>> dir('ABC')
['__add__', '__class__',..., '__subclasshook__', 'capitalize', 'casefold',..., 'zfill']
每个类型都会包含诸多方法,如len() == __len__() __len__为对象所属类型中定义的方法
getattr(实例,属性,404)获取属性 ,若无返回404
hasattr() 判断有无该属性
setattr(obj,"y",123)设置y属性
class Student(object): count= 0 def __init__ (self,name): self.name = name Student.count = Student.count + 1 print(Student.count) bart = Student("KO") bart.name bo = Student("asdf")
对类绑定属性