多态和封装

多态

>>> "This is a book".count("s")
2
>>> [1,2,4,3,5,3].count(3)
2

count()的作用是数一数某个元素在对象中出现的次数

>>> 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‘}"
#!/usr/bin/env python
# coding=utf-8

"the code is from: http://zetcode.com/lang/python/oop/"

__metaclass__ = type

class Animal:
    def __init__(self, name=""):
        self.name = name

    def talk(self):
        pass

class Cat(Animal):
    def talk(self):
        print "Meow!"

class Dog(Animal):
    def talk(self):
        print "Woof!"

a = Animal()
a.talk()

c = Cat("Missy")
c.talk()

d = Dog("Rocky")
d.talk()

代码中有Cat和Dog两个类,都继承了类Animal,它们都有talk()方法,输入不同的动物名称,会得出相应的结果。

多态问题,最后还要告诫,类型检查是毁掉多态的利器,比如type、isinstance以及isubclass函数,所以,一定要慎用这些类型检查函数。

封装和私有化

python中私有化的方法也比较简单,就是在准备私有化的属性(包括方法、数据)名字前面加双下划线。

#!/usr/bin/env python
# coding=utf-8

__metaclass__ = type

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

用上面的方法,的确做到了封装。但是,我如果要调用那些私有属性,怎么办?

可以使用property函数

#!/usr/bin/env python
# coding=utf-8

__metaclass__ = type

class ProtectMe:
    def __init__(self):
        self.me = "qiwsir"
        self.__name = "kivi"

    @property
    def name(self):
        return self.__name

if __name__ == "__main__":
    p = ProtectMe()
    print p.name

用了@property之后,在调用那个方法的时候,用的是p.name的形式,就好像在调用一个属性一样,跟前面p.me的格式相同。

时间: 2024-08-09 01:58:02

多态和封装的相关文章

009.面向对象之多态、封装、密封类、接口

1.多态 定义:不同对象对于同一个方法(Cut)调用表现出不同行为多态性主要是靠重写和隐藏来实现 a.(父类引用指向子类对象)b.(父类类型做参数,传递子类对象)自定义方法参数是父类类型 传递的实参是子类对象c.(父类类型作返回类型,return子类对象)自定义方法的返回类型是父类类型,return是类对象注:都是把子类对象赋给父类类型 举例: 添加乐器类using System;using System.Collections.Generic;using System.Linq;using S

Objective-c 继承,多态,封装

.m文件 // //  main.m //  Objective-c 继承 //  Created by 非凡 on 15/10/10. //  Copyright (c) 2015年 非凡. All rights reserved. // #import <Foundation/Foundation.h> //引入其他类的头文件是让你实力化的对象认识这是什么鬼 //引入Car头文件 #import "Car.h" //引入zilei头文件 #import "zi

Python基础- 类和对象(使用、继承、派生、组合、接口、多态、封装、property、staticmethod、classmethod、反射、slots、上下文管理协议、元类)

标签: python对象 2017-07-01 16:28 79人阅读 评论(0) 收藏 举报  分类: python(11)  版权声明:本文为广大朋友交流学习,如有纰漏望不吝赐教,若存在版权侵犯请及时与我联系 目录(?)[+] 一.初识类和对象 在python3中类型就是类 先定义类在产生相对应的对象,也就是现有了概念再有了实体 class Garen: camp = 'Demacia' def attack(self): print('attack') 1.如何使用类 在python3:

多态与封装

html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption

继承、多态、封装、接口

继承部分 继承(加上封装和多态性)是面向对象的编程的三个主要特性(也称为"支柱")之一. 继承用于创建可重用.扩展和修改在其他类中定义的行为的新类. 其成员被继承的类称为"基类",继承这些成员的类称为"派生类". 派生类只能有一个直接基类. 但是,继承是可传递的. 如果 ClassB 派生出 ClassC,ClassA 派生出 ClassB,则 ClassC 会继承 ClassB 和 ClassA 中声明的成员. 定义一个类从其他类派生时,派生类

面向对象三大特性:封装,继承,多态(一,封装和继承)

封装.继承和多态是面向对象程序设计的三个核心特性. 封装是面向对象技术中的一个重要概念,是一种信息隐藏技术,它体现了面向对象程序设计的思想. 继承是面向对象程序设计方法的一个重要手段,通过继承可以更有效地组织程序结构,明确类间的关系,育雏利用已有的类来完成更复杂.更深入的程序开发. 多态允许以一种统一的风格处理已存在的变量和相关的类,多态性使得向系统增加功能变的容易. 一.封装 封装的含义是:类的设计者把类设计成一个黑匣子,使用者只能看见类中定义的公共变量和公共方法,而看不见方法的具体实现细节,

JavaScript OOP多态、封装、继承

封装 封装就是把抽象出来的数据和对数据的操作封装在一起,数据被保护在内部, 程序的其它部分只有通过被授权的操作(成员方法),才能对数据进行操作. JS封装只有两种状态,一种是公开的,一种是私有的. <script type="text/javascript"> function Person(name, agei, sal){ // 公开 this.name = name; // 私有 var age = agei; var salary = sal; } var p1 =

python_面向对象之多态、封装

多态一.定义多态:有不同的类实例化得到的对象,调用不同的方法,执行的逻辑不同.类的继承有两层意义:1.改变,2.扩展.多态就是类的两层意义的一个具体的实现机制,即:调用不同的类实例化的对象下的相同方法,实现的过程不一样.一.封装封装可以理解为一个多功能的自助饮料机器,且机器是不透明密封的,只在下方开了不同的龙头,当顾客需要不同的饮料时,只需要去打开不同的龙头开关即可得到自己想要的饮料,但顾客不知道机器内部是产生不同的饮料的.在python中,封装可以是类,可以是函数.封装是将数据或属性隐藏在内部

day25 多态和封装

# 继承:什么是什么的关系 # 单继承 ***** # 先抽象在继承,几个类之间相同代码抽象出来,成为父类 # 子类自己没有名字,就可以使用父类的方法和属性 # 如果子类自己有,优先使用自己的 # 在类中使用self时,要搞清楚self的指向谁 # 多继承 *** # 新式类和经典类: # 多继承寻找名字的顺序:新式类广度优先,经典类深度优先 # 新式类中有一个类名.mro方法,查看广度优先的继承顺序 # 在python3中有一个super方法,根据广度优先的继承顺序查找上一个类 # java: