""""" 一成员修饰符 1.共有 2.私有成员,__字段名:无法直接访问,只能间接访问 私有字段是无法继承的 也就是说只在方法内部有效 即使继承了也不能调用 """ #2.字段私有与公有 class Foo: def __init__(self,name,age): self.name=name self.age = age self.__age=age #私有,外部无法直接访问 def show(self): return self.__age obj=Foo('lin',19) print(obj.name) print(obj.age) #p0rint(obj.__age) #访问不到 ret=obj.show() print(ret) #同理静态字段也是可以的 #2.方法私有与公有 class Foo: def __f1(self): return 123 def f2(self): r=self.__f1() return r obj=Foo() r=obj.f2() print(r) """"" 二、特殊 __init__ 类()自动执行 __del__ 对象()被销毁时,执行 __dict__ 将对象中封装的所有内容通过字典形式返回 __call__ 对象() 类() 自动执行 __int__ int(对象) __str__ str() __add__ 加 __getitem__ """ class Foo: def __init__(self): print('123') def __call__(self, *args, **kwargs): print('abc') obj=Foo() obj()#abc Foo()()#与上方相等 class Foo: def __init__(self,n,a): self.name=n self.age=a def __str__(self): return '%s-%s' %(self.name,self.age) #若没有这句会报错 obj=Foo('alex',18) print(obj) class Foo: def __init__(self,name,age): self.name=name self.age=age def __add__(self, other): return self.age+other.age obj1=Foo('lin',19) obj2=Foo('lin',66) r=obj1+obj2 #两对象相加时,自动执行第一个对象的__add__方法,并将第二个对象当作参数传递 print(r)#85 class Foo: def __init__(self,name,age): self.name=name self.age=age def __getitem__(self, item): print(item) return item+2 def __setitem__(self, key, value): print(key,value) def __delitem__(self, key): print(key) #字典 obj=Foo('lin',20) d=obj.__dict__ print(d)#{'age': 20, 'name': 'lin'} #取 li=Foo('lin',20) r=li[8] print(r) #赋值 li[100]='asdf' #删除 del li[999] #如何进行遍历 class Foo: def __init__(self,name,age): self.name=name self.age=age def __iter__(self): #1.执行li对象的类F类中的iter方法,并获取返回值 #2.循环上一步返回的对象 #3.可如果类中由__iter__方法,则对象为可迭代对象 #4.对象.__iter__()的返回值:迭代器 #5.for循环 可迭代对象 return iter([1,2,3]) li=Foo('lin',20) for i in li: print(i) """"" 三metclass类的 a python中一切事物都是对象 b class Foo: pass obj =Foo() #obj是对象,Foo类 #Foo类也是一个对象,type的对象 c. 类都是type类创建的对象 type(..) “对象”都是以类的对象 类() """ #类的创建 class Foo(object): def dunc(self): print(123) obj=Foo() #============ """"" type('Foo',(object,),('func':lambda x:123)) 声明一个类,类里面有一个成员func Foo=type('Foo',(object,),('func':lambda x:123)) Foo() """ #让foo不再通过type类型创建 而是通过自定义的mytype类进行创建 class mytype(type): def __init__(self,*args,**kwargs): print('123') pass def __call__(self, *args, **kwargs): print(456) class foo(object,metaclass=mytype): def func(self): print('abc') obj=foo()#456 #foo=mytpe()