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——面向对象(三)

评论关闭