美文网首页
python 进阶 面向对象(二)

python 进阶 面向对象(二)

作者: xinmin | 来源:发表于2018-09-27 23:06 被阅读0次
  • 利用反射查看面向对象成员归属
    # s1模块
     class Foo:
         
          country = "China" # 静态字段,存在类中
    
          def __init__(self, name):
               self.name = name # 普通字段,对象中
      
          # 普通方法,类中
          def show(self):
              print("show")
    
          # 静态方法,类中
          @staticmethod
          def xo(arg1, arg2):
              print("XO")
    
    obj = Foo("xinmin")
    # 反射:以字符串的形式去对象(模块)中操作其成员
    # 反射:类,只能找类里的成员
    r = hasattr(Foo, ''show")
    print(r) # True
    # 反射:对象, 既可以找对象,也可以找类的成员
    r1 = hasattr(obj, 'name')
    print(r1) # True
    r2 = hasattr(obj, 'show')
    print(r2) # True
    
  • 通过反射去查找
    # 导入模块
    m = __import__('s1', fromlist=True)
    # 去模块中寻找类
    class_name = getattr(m, "Foo")
    # 创建对象
    obj = class_name("xinmin")
    # 去对象中找name 对应的值
    val = getattr(obj, 'name')
    print(val)
    
  • 在python中都可通过:类,对象 ====》静态字段,静态方法,普通方法、类的方法
  • 通过类访问的有:静态字段,静态方法,类方法(特殊的静态方法)
  • 通过对象访问的有:普通字段,类的方法
    class Provice:
         # 静态字段
         country = "中国"
         # 构造方法
         def __init__(self, name):
             # 普通字段,对象中
             self.name = name
         # 类方法
         @classmethod
         def xxoo(cls): # cls就是当前类名
             print("xxoo")
         # 静态方法
         @staticmethod
         def xo(arg1, arg2):
             print("xo")
         # 普通方法,类中
         def show(self):
             print("show")
         # 普通方法
         def start(self):
             temp = "%s xxx" %self.name 
             return temp
         # python特性:将方法伪装成字段,访问时不需要加括号,但带参数则报错
         @property
         def end(self):
             temp = "%s xxx" %self.name 
             return temp   
         @end.setter
         def end(self, value):
             print(value)
             self.name = value
             
    obj = Provice("xinmin")
    # print(obj.name) # xinmin
    ret1 = obj.start() 
    print(ret1) # xinmin xxx
    # 获取特性
    ret2 = obj.end
    print(ret2) # xinmin xxx
    # 设置特性
    obj.end = "xxoo" # xxoo
    print(obj.end) # xxoo xxx
    
  • 总结
    • 成员:
      • 字段 : 静态字段(每个对象都有一份)、普通字段(每个对象都是不同的数据)
      • 方法 : 静态方法(无需使用对象封装的内容)、普通方法(使用对象中的数据)、类方法
      • 特性: 普通特性(将方法伪装成字段)
        快速判断,类执行,还是对象执行
      • self:对象调用
      • 无self:类调用

相关文章

网友评论

      本文标题:python 进阶 面向对象(二)

      本文链接:https://www.haomeiwen.com/subject/ktkroftx.html