多态和封装
>>> "This is a book".count("s")
2
>>> [1,2,4,5,3].count(3)
1
>>> f = lambda x,y:x+y
>>> f(2,3)
5
>>> f("qiw","sir")
'qiwsir'
>>> f(["python","java"],["c++","lisp"])
['python', 'java', 'c++', 'lisp']
在那个lambda函数中,我们没有限制参数的类型,也一定不能限制,因为如果限制了,就不是pythonic了。可以给参数任意类型,都能到得到不报错的结果。当然,这样做之所以合法,更多的是来自与+的功能强悍。
repr()函数,它能够针对输入的任何对象返回一个字符串。这就是多态的代表之一。
>>> repr([1,2,3])
'[1, 2, 3]'
>>> repr(1)
'1'
>>> repr({"lang":"python"})
"{'lang': 'python'}"
>>> def length(x):
print "The length of", repr(x), "is", len(x)
>>> length("how are you")
The length of 'how are you' is 11
>>> length([1,2,3])
The length of [1, 2, 3] is 3
封装和私有化
在程序设计中,封装(Encapsulation)是对object的一种抽象,即将某些部分隐藏起来,在程序外部看不到,即无法调用。
要了解封装,离不开“私有化”,就是将类或者函数中的某些属性限制在某个区域之外,外部无法调用。
python中私有化的方法也比较简单,就是在准备私有化的属性(包括方法、数据)名字前面加双下划线。
class ProtectMe:
def __init__(self):
self.me = "qiwsir"
self.__name = "kivi"
def __python(self):
print "I love Python."
def code(self):
print "Which language do you like?"
self.__python()
if __name__ == "__main__":
p = ProtectMe()
print p.me
print p.__name
运行一下,看看效果:
$ python 21102.py
qiwsir
Traceback (most recent call last):
File "21102.py", line 21, in <module>
print p.__name
AttributeError: 'ProtectMe' object has no attribute '__name'
查看报错信息,告诉我们没有_name那个属性。果然隐藏了,在类的外面无法调用。
>>> "This is a book".count("s")
2
>>> [1,2,4,5,3].count(3)
1
>>> f = lambda x,y:x+y
>>> f(2,3)
5
>>> f("qiw","sir")
'qiwsir'
>>> f(["python","java"],["c++","lisp"])
['python', 'java', 'c++', 'lisp']
在那个lambda函数中,我们没有限制参数的类型,也一定不能限制,因为如果限制了,就不是pythonic了。可以给参数任意类型,都能到得到不报错的结果。当然,这样做之所以合法,更多的是来自与+的功能强悍。
repr()函数,它能够针对输入的任何对象返回一个字符串。这就是多态的代表之一。
>>> repr([1,2,3])
'[1, 2, 3]'
>>> repr(1)
'1'
>>> repr({"lang":"python"})
"{'lang': 'python'}"
>>> def length(x):
print "The length of", repr(x), "is", len(x)
>>> length("how are you")
The length of 'how are you' is 11
>>> length([1,2,3])
The length of [1, 2, 3] is 3
封装和私有化
在程序设计中,封装(Encapsulation)是对object的一种抽象,即将某些部分隐藏起来,在程序外部看不到,即无法调用。
要了解封装,离不开“私有化”,就是将类或者函数中的某些属性限制在某个区域之外,外部无法调用。
python中私有化的方法也比较简单,就是在准备私有化的属性(包括方法、数据)名字前面加双下划线。
class ProtectMe:
def __init__(self):
self.me = "qiwsir"
self.__name = "kivi"
def __python(self):
print "I love Python."
def code(self):
print "Which language do you like?"
self.__python()
if __name__ == "__main__":
p = ProtectMe()
print p.me
print p.__name
运行一下,看看效果:
$ python 21102.py
qiwsir
Traceback (most recent call last):
File "21102.py", line 21, in <module>
print p.__name
AttributeError: 'ProtectMe' object has no attribute '__name'
查看报错信息,告诉我们没有_name那个属性。果然隐藏了,在类的外面无法调用。