python学习笔记_day07

匿名 (未验证) 提交于 2019-12-02 22:51:30

模块就是py文件, 模块导入就是执行文件

import module_name from package import module_name 

广义的封装: 把变量和函数都放在类中
狭义的封装: 把变量和方法隐藏起来, 不对外公开, 只在内部引用

class Foo:     # 公有变量     a = 'aa'     # 私有变量     __b = 'bb'      # 私有变量只允许这样调用     def show(self):         print(self.__b)  x = Foo() x.__b # --> 报错 x.show() # --> 'bb' ''' 私有变量实际上是把变量__b转换为了_Foo__b, 所以实际调用是x._Foo__b, 通常不这么使用 '''
class Foo:     def __init__(self):         self.__func()     def __func(self):         print('in Foo')  class Son(Foo):     def __func(self):         print('in Son')  s = Son() ''' 1. 调用Son类中__init__方法进行实例化 2. Son中没有__init__方法, 向上寻找, 并将s作为参数传给Foo, 在Foo类中需要__init__方法进行实例化 3. 执行Foo类中的__init__方法, 因为__func是Foo的私有属性, 所以__func()实际为_Foo__func() 4. s._Foo_func()在Son类中没有, 执行Foo类中的_Foo_func() 5. 获得结果in Foo '''

通过字符床类型的变量名访问变量的值
只要是x.y格式的都可以用反射


通常和hasattr何用, hasattr用来验证反射是否存在, 用于容错

class Foo:     x = 1  # 类.静态属性 print(Foo.x)  # 反射 if hasattr(Foo, 'x')     getattr(Foo, 'x')
class Foo:     def __init__(self, name):         self.name = name  egon = Foo('egon') # 对象.静态属性 print(egon.name)  # 反射 if hasattr(egon, 'name'):     getattr(egon, 'name')
'''文件a''' # 定义s1方法 def s1():     print('s1)
'''文件 b''' # 导入a模块 import a  # 反射 if hasattr(a, 's1')     getattr(a, 's1')() # --> s1
import sys  def s1():     print('s1') def s2(x):     print('%s' % x)  # 想使用自己模块内的方法或进行实例化需要或许自己模块的名字 my_Module_Name = sys.modules[__name__]  getattr(my_Module_Name, 's1')() # --> s1 getattr(my_Module_Name, 's2')('this is s2') # --> this is s2

setattr(obj, str, value)

class Foo:     def __init__(self):         self.x = 1  f = Foo()  if hasattr(f,'x'):     print(getattr(f,'x'))  setattr(f, 'y', 2) print(f.__dict__) # --> {'x': 1, 'y': 2}

delattr(obj, str)

class Foo:     def __init__(self):         self.x = 1         self.y = 2  f = Foo()  if hasattr(f,'x'):     delattr(f, 'y')  print(f.__dict__) # --> {'x': 1}

json

pickle

在类中,. 方法一般都是动作

在面向对象的思想里, 属性是静态的, 方法是动态的

Class Circle:     def __init__(self, r):         self.r = r     @property     def s(self):         return 3.14 * self.r **2     def d(self):         return 3.14 * self.r * 2  c = Circle(1) print(c.s) # --> 3.14 print(c.d()) # --> 6.28 
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!