zoukankan      html  css  js  c++  java
  • 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.__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()
  • 相关阅读:
    多校 4686 Arc of Dream hdu 矩阵解
    关于wind7重新安装系统后,连接mysql的问题
    hadoop学习之ZooKeeper
    viewDidLoad、viewDidUnload、viewWillAppear、viewDidAppear、viewWillDisappear 和 -viewDidDisappear的区别和使用
    python处理中文字符
    linux配置本地tomcat应用80端口转发
    基于JVM规范的并发编程解决方案
    poj 3211 Washing Clothes(背包)
    hdu 4687 带花树匹配
    SQLiteLog (1) no such Column:
  • 原文地址:https://www.cnblogs.com/zzzi/p/11478446.html
Copyright © 2011-2022 走看看