python——面向对象(三),,"""""一成员修饰
python——面向对象(三),,"""""一成员修饰
"""""一成员修饰符1.共有2.私有成员,__字段名:无法直接访问,只能间接访问私有字段是无法继承的 也就是说只在方法内部有效即使继承了也不能调用"""#2.字段私有与公有class Foo: def __init__(self,name,age): self.name=name self.age = age self.__age=age #私有,外部无法直接访问 def show(self): return self.__ageobj=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 robj=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()#abcFoo()()#与上方相等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.ageobj1=Foo(‘lin‘,19)obj2=Foo(‘lin‘,66)r=obj1+obj2#两对象相加时,自动执行第一个对象的__add__方法,并将第二个对象当作参数传递print(r)#85class 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: passobj =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))声明一个类,类里面有一个成员funcFoo=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()
python——面向对象(三)
相关内容
- Python练手例子(5),,25、求1+2!+3
- python tkinter坐标转换,,tkinter中坐标
- python 的requests如何使用代理,,headers.py
- python--math库,,函数数学表示含义圆周
- 初识python(二),,一、分支结构单分支结
- web自动化一(selenium+python+pycharm环境搭建),,年前公司
- 利用python找出两文件夹里相同的文件并保存在新的文件
- 从 Python 之父的对话聊起,关于知识产权、知识共享与
- centos7 下面python2 共存python3,,第一步、查看pyth
- Python安装PyOpenGL,,1.目前PyOpen
评论关闭