classTest:def __init__(self):
xxx
类是创建实例的模板,而实例则是一个一个具体的对象,各个实例拥有的数据都互相独立,互不影响
成员函数和普通函数的区别是:成员函数的第一个参数永远是self,且调用时不需要显示填入
访问限制:
一个下划线看头的变量和方法可以被访问,但是不建议访问
两个下划线开头的变量和方法不可以被访问,直接报错
两个下划线开头和两个下划线结尾的变量和方法是特殊的,有特殊用途
继承和多态:classBase:def def __init__(self):pass
deffunc(self):print("Base")classDrived(Base):def__ init__(self):
Base.__ init__()pass
deffunc(self):print("Drived")pass子类可以定义和父类相同的方法,此时叫复写,也可实现多态
可以使用Base.func()显式调用父类的同名方法
Python中没有方法重载,成员方法也是对象的属性,当方法名相同时,直接覆盖
获取对象信息:
type() 返回的是Class类型
type库中有很多常量,用于和type()的返回值做对比
types.FunctionType 自定义函数
types.BuiltinFunctionType 内建函数
types.LambdaType lambda表达式
...
isinstance() 判断继承关系
dir()函数获得一个对象的所有属性和方法,它返回一个包含字符串的list
类属性和实例属性:classTest:
xxx=yyy 类属性def __init__(self):
self.xxx 实例属性
调用类属性的方式:Test.xxx
给实例单独绑定的属性,只影响实例自身,不影响其它实例
限制给单个实例添加属性的方法:classTest():__slots__ = ('name', 'age') #用tuple定义允许绑定的属性名称
使用@propertyclassTest():
@property#设置属性
defname(self):returnself._name
@name.setter#设置setter
defname(self, other):print("setter")
self._name=otherif __name__ == '__main__':
t=Test()
t.name= "abc"
print(t.name)
功能:可以用于参数检查
经典类和新式类的区别在于:
经典类是默认没有派生自某个基类的,而新式类是默认派生自object这个基类的,Python3默认是新式类
经典类在类多重继承的时候是采用从左到右深度优先原则匹配方法的.而新式类是采用C3算法(不同于广度优先)进行匹配的
不建议使用多重继承
初始化的时候,建议使用super(),不建议使用 类名.__init__() 的方式
类中的一些特殊方法:__str__打印时调用,打印的内容就是函数的返回值__slots__限制给实例对象单独添加属性__len__执行len()函数时调用__iter__如果一个类想被用于for ... in循环,类似list或tuple那样,就必须实现一个__iter__()方法,该方法返回一个迭代对象,
然后,Python的for循环就会不断调用该迭代对象的__next__()方法拿到循环的下一个值,直到遇到StopIteration错误时退出循环classFib(object):def __init__(self):
self.a, self.b= 0, 1 #初始化两个计数器a,b
def __iter__(self):return self #实例本身就是迭代对象,故返回自己
def __next__(self):
self.a, self.b= self.b, self.a + self.b #计算下一个值
if self.a > 100000: #退出循环的条件
raiseStopIteration()return self.a #返回下一个值
__getitem__让类对象可以向访问列表的方式使用__getattr__当访问的类属性不存在时,就会调用该方法__call__() 直接对实例进行调用classStudent(object):def __init__(self, name):
self.name=namedef __call__(self):print('My name is %s.' %self.name)>>> s = Student('abc')>>> s() #self参数不要传入
My name isabc.
枚举类:
枚举类中,不应该存在key相同的枚举项(类变量)
不允许在类外直接修改枚举项的值
enum模块是系统内置模块,可以直接使用import导入#导入枚举类
from enum importEnum#继承枚举类
classcolor(Enum):
YELLOW= 1BEOWN= 1RED= 2GREEN= 3PINK= 4可以再class上加@unique,可以帮助我们检查保证没有重复值