私有方法的使用
如下 tmp 类中,__privateFun(self) 为类实现的私有方法,实例化之后不可直接调用,该特点与私有变量类似不再赘述。
dir(tmp) 可知该私有方法被 mapping 成 _tmp__privateFun 以防止实例直接调用。如需增加实例访问接口只需添加实例方法(例如,下面的 call_fun),在实例方法中调用私有方法即可。
class tmp: def __init__(self): self.__name='hell' def __privateFun(self): print self.__name def call_fun(self): self.__privateFun() t=tmp() t.call_fun()
关于类和对象总是很难理解,之前学过有个比较好理解的比喻,希望有助于理解。
如果我们把类比作一个建筑图纸(一张房子的蓝图),那么对象就是根据这个图纸建的实实在在的房子。而shelf则是这个房子对应的门牌,这些房子可能住着不同的人,他们需要这些门牌找到对应的家。
类中的属性和对象就像给这个房子设置的各种设施,一套房子建好,当然就拥有这些设施,当然你也可以根据自己的需求要不要这些设施,或者改装一下。
新式类和经典类的区别:
class A: def foo(self): print('called A.foo()') class B(A): pass class C(A): def foo(self): print('called C.foo()') class D(B, C,object): pass if __name__ == '__main__': d = D() d.foo()
D 继承了 object 和不继承程序输出不一样,继承 object 会调用 C 类的 foo,否则会调用 A 的。
使用 super 进行父类构造调用那么必须使用 object 继承的新式类,否则报错。
object._className__attrName 实例及解析
#!/usr/bin/python # -*- coding: UTF-8 -*- class JustCounter: __secretCount = 0 # 私有变量 publicCount = 0 # 公开变量 def count(self): self.__secretCount += 1 self.publicCount += 1 print self.__secretCount def count2(self): print self.__secretCount counter = JustCounter() counter.count() # 在类的对象生成后,调用含有类私有属性的函数时就可以使用到私有属性. counter.count() #第二次同样可以. print counter.publicCount print counter._JustCounter__secretCount # 不改写报错,实例不能访问私有变量 try: counter.count2() except IOError: print "不能调用非公有属性!" else: print "ok!" #现在呢!证明是滴!
不要在 try 里写返回值。 try-except-else 里都是指做某事,而不是处理返回。如果在 try 里面写返回值,则 else 部分是 unreachable 的。
def try_exception(num): try: return int(num) except ValueError,arg: print arg,"is not a number" else: print "this is a number inputs"
感谢您的支持,我会继续努力的!
支付宝扫一扫,即可进行扫码打赏哦
986Python 高级教程 Python 面向对象
私有方法的使用
如下 tmp 类中,__privateFun(self) 为类实现的私有方法,实例化之后不可直接调用,该特点与私有变量类似不再赘述。
dir(tmp) 可知该私有方法被 mapping 成 _tmp__privateFun 以防止实例直接调用。如需增加实例访问接口只需添加实例方法(例如,下面的 call_fun),在实例方法中调用私有方法即可。
985Python 高级教程 Python 面向对象
关于类和对象总是很难理解,之前学过有个比较好理解的比喻,希望有助于理解。
如果我们把类比作一个建筑图纸(一张房子的蓝图),那么对象就是根据这个图纸建的实实在在的房子。而shelf则是这个房子对应的门牌,这些房子可能住着不同的人,他们需要这些门牌找到对应的家。
类中的属性和对象就像给这个房子设置的各种设施,一套房子建好,当然就拥有这些设施,当然你也可以根据自己的需求要不要这些设施,或者改装一下。
984Python 高级教程 Python 面向对象
新式类和经典类的区别:
D 继承了 object 和不继承程序输出不一样,继承 object 会调用 C 类的 foo,否则会调用 A 的。
使用 super 进行父类构造调用那么必须使用 object 继承的新式类,否则报错。
983Python 高级教程 Python 面向对象
object._className__attrName 实例及解析
982Python 异常处理
不要在 try 里写返回值。 try-except-else 里都是指做某事,而不是处理返回。如果在 try 里面写返回值,则 else 部分是 unreachable 的。
def try_exception(num): try: return int(num) except ValueError,arg: print arg,"is not a number" else: print "this is a number inputs"