一、成员修饰符
1、公有成员:字段名
实例:
class Foo: def __init__(self,name,age): self.name=name # 定义公有字段 self.age=age def show(self): print(self.name) print(self.age) obj=Foo(‘lh‘,‘18‘) obj.show()
2、私有成员: __字段名
实例:
class Foo: def __init__(self): self.gender = ‘man‘ # 定义公有字段 self.__gene = 123 # 定义私有字段 class S(Foo): def __init__(self, name): self.name = name self.__age = 123 # 私有字段只存在在本类中,任何其他类不能访问 super(S, self).__init__() #调用基类中的__init__方法 def show(self): print(self.name) print(self.gender) print(self.__age) # print(self.__gene) # 派生类不能访问基类中的私有字段 obj = S(‘lh‘) obj.show()
二、特殊成员
1、__init__
实例:
class Foo: def __init__(self,name,age): self.name=name self.age=age obj=Foo(‘lh‘,‘18‘) # 自动执行__init__方法
2、__call__
实例:
class Foo: def __call__(self, *args, **kwargs): print(‘call‘) # Foo()() # 类名()().自动执行__call__方法 obj=Foo() obj() # 对象(),自动执行__call__方法
3、__int__
实例:
class Foo: def __int__(self): # int(对象),自动执行__int__方法 return 1 obj=Foo() ret=int(obj) print(ret)
4、__str__
实例:
class Foo: def __str__(self): return 2 obj=Foo() ret=str(obj) # str(对象),自动执行__str__方法 print(ret)
5、__getitem__
实例:
class Foo: def __init__(self, name, age): self.name = name self.age = age def __getitem__(self, item): return item li = Foo(‘lh‘, ‘18‘) ret1 = li[2] # 调用__getitem__方法,返回结果为2 print(ret1)
9、__setitem__
实例:
class Foo: def __init__(self, name, age): self.name = name self.age = age def __setitem__(self, key,value): print(key,value) li = Foo(‘lh‘, ‘18‘) li[2] = ‘lh‘ #调用__setitem__方法(设置key和value值)
10、__delitem__
实例:
class Foo: def __init__(self, name, age): self.name = name self.age = age def __delitem__(self, key): print(key) del li[1] #调用__delitem__方法
11、__iter__
class Foo: def __init__(self, name, age): self.name = name self.age = age def __iter__(self): return iter([11, 22, 33]) obj = Foo(‘lh‘, 18) for i in obj: # 调用__iter__方法,先转换成迭代器,再进行循环 print(i)
12、__dict__
实例:
class Province: def __init__(self,name,count): self.name=name self.count=count obj=Province(‘河北‘,‘10000‘) print(obj.__dict__) # 以字典格式输出
三、metaclass,类的祖宗
1、 Python中一切事物都是对象
2、
class Foo: pass obj = Foo() # obj是Foo类的对象 # Foo类是type的对象
3、 类都是type类的对象 type(..),“对象”都是以类的对象 类()
四、异常处理
实例1:
try: r1=int(‘weq‘) # 只要有一个错误,下边代码就不会执行 # li=[11,22,33] # r2=li[444] # ret=int(‘111‘) except IndexError as e: print(‘IndexError‘) except ValueError as e: print(‘ValueError‘) except Exception as e: print(‘有错误‘) else: # try代码块中没错时,执行本代码 print(‘正确‘) finally: # 不管从程序有没有错误,最后都会执行本代码 print(‘666‘)
实例2:
class LhError(Exception): # 自己定义错误 def __init__(self,msg): self.message=msg def __str__(self): return self.message try: raise LhError(‘错误!‘) # 主动捕获异常 except LhError as e: print(e) # 打印错误信息 print(123) assert 1==1 # 必须满足assert条件,下边代码才会执行 print(456)
五、反射
1、方法
# 通过字符串的形式操作对象中的成员 class Foo: def __init__(self,name,age): self.n=name self.a=age def show(self): print(self.n,self.a) obj=Foo(‘lh‘,18) func=getattr(obj,‘show‘) # 获取对象中的方法 func() print(getattr(obj,‘n‘)) # 获取对象中的数据 print(hasattr(obj,‘name‘)) # 判断对象中是否有这个数据 setattr(obj,‘gender‘,‘男‘) # 在对象中添加数据 print(obj.gender) delattr(obj,‘gender‘) # 在对象中删除数据
2、实例
# s2文件: def f1(): return ‘首页‘ def f2(): return ‘新闻‘ def f3(): return ‘关注‘ # 主文件: import s2 while True: inp = input(‘请输入您要进入的页面:‘) if hasattr(s2, inp): # 判断在f2中是否有输入的函数 func = getattr(s2, inp) # 创建输入的函数的对象 ret = func() # 执行函数 print(ret) elif inp == ‘q‘: break else: print(‘您输入错误!‘)
六、单例模式
实例:
class Foo: __v = None @classmethod def get_instance(cls): if cls.__v==None: # 如果cls._instance不为None,直接返回cls._instance return cls.__v else: # 如果cls._instance为None说明该类还没有实例化过,实例化该类,并返回 cls.__v = Foo() return cls.__v ret = Foo.get_instance() print(ret) ret = Foo.get_instance() print(ret) ret = Foo.get_instance() print(ret)
时间: 2024-10-06 22:35:25