Python开发之(二)-巧妙使用类
目录
一、前言
- 面向对象开发语言是当前开发语言的主流。
二、创建类时__init__与__call__的调用
-
1、创建一个类
class Hello: def __init__(self): print("init") def __call__(self, *args, **kwargs): print("call args %s kwargs %s" %(args,kwargs))
-
当调用hello = Hello()时,init(self)方法被调用,也就是初始化方法,在生成类的实例时执行。
-
_call_
这个方法很有趣,其作用是模拟()的调用,需要在实例上调用 -
我们来改造下Hello类
class Hello: names = []; def __init__(self,name): self.names; print("init"); self.names.append("hello %s!"%name); def __call__(self, *args, **kwargs): print("call args:%s and kwargs:%s"%(args,kwargs)) for name in args: self.names.append("hello %s!" % name); return self; hello1 =Hello("安杰"); print(hello1.names); hello2 =hello1("angels"); print(hello2.names); print(hello1); print(hello2); //调用结果 init ['hello 安杰!'] call args:('angels',) and kwargs:{} ['hello 安杰!', 'hello angels!'] <__main__.Hello object at 0x100a39f60> <__main__.Hello object at 0x100a39f60>
-
可以看到,
_call_
方法是调用Hello类的实例时,调用的,我们可以自由的选择是否需要有return语句来控制调用后是否有返回值 -
当然,你也可以这样
class Hello: names = []; def __init__(self,name): self.names; print("init"); self.names.append("hello %s!"%name); def __call__(self, *args, **kwargs): print("call args:%s and kwargs:%s"%(args,kwargs)) for name in args: self.names.append("hello %s!" % name); hello =Hello("安杰"); print(hello.names); hello("angels") print(hello.names); //调用结果 init ['hello 安杰!'] call args:('angels',) and kwargs:{} ['hello 安杰!', 'hello angels!']
-
通过上面的例子,我们是否很容易就学习了
_call_
和_init_
两个方法的使用以及类的定义形式