1-类和实例

class Student(object):
def __init__(self, name, score):# _init__方法的第一个参数永远是self,表示创建的实例本身
self.name = name
self.score = score
def print_score(self):
print('nams:%s, score:%s'%(self.name,self.score))
def get_grade(self):
if(self.score >=90):
return 'A'
elif(self.score >= 60):
return 'B'
else:
return 'C' #调用
stu = Student('qinzhongbao',79)
stu.print_score()
print(stu.get_grade())

2-访问限制
  例的变量名如果以__开头,就变成了一个私有变量(private),只有内部可以访问

class Person(object):
def __init__(self, name, score):
self.__name = name
self.__score =score
def print_score(self):
print('name:%s,score:%s'%(self.__name,self.__score))
def get_name(self):
return self.__name person = Person('fengyong',88)
person.__name ='newName' #修改值
print(person.__name) #newName
print(person.get_name()) #fengyong 修改值没有生效

3-继承和多态

class Animal(object): #继承object
def run(self):
print('Animal is running') class Dog(Animal): #继承Animal
def run(self):
print('Dog is running') class Cat(Animal):
def run(self):
print('Cat is running') def run(animail):
animail.run() animal = Animal()
run(animal)
run(Dog())
run(Cat())
#对于Python这样的动态语言来说,则不一定需要传入Animal类型。
#我们只需要保证传入的对象有一个run()方法就可以了

4-获取对象信息

  4.1使用type()函数

type(123)#<class 'int'>
type('str') #<class 'str'>
type(123)==type(456) #True
type('abc')==str #True
type('abc')==type(123) #False import types
def fn():
pass
type(fn)==types.FunctionType#True
type(abs)==types.BuiltinFunctionType #True
type(lambda x: x)==types.LambdaType#True
type((x for x in range(10)))==types.GeneratorType #True
dir(types) #可查看types常用常量

4.2 isinstance使用

#使用 isinstance, 对于class继承来说,type()就很不方便
#如果继承关系是:object -> Animal -> Dog -> Husky
isinstance(d, Dog) and isinstance(d, Animal) #true
isinstance([1, 2, 3], (list, tuple)) #判断是某类型中的一种
isinstance(b'a', bytes) #True

4.3 dir使用

#如果要获得一个对象的所有属性和方法,可以使用dir()函数,它返回一个包含字符串的list
dir('ABC')

4.4 len(obj)

  我们自己写的类,如果也想用len(myObj)的话,就自己写一个__len__()方法

4.5 getattr()、setattr()以及hasattr()

  仅仅把属性和方法列出来是不够的,配合getattr()、setattr()以及hasattr(),我们可以直接操作一个对象的状态:

class MyObject(object):
def __init__(self):
self.x = 9
def power(self):
return self.x * self.x
obj = MyObject()
hasattr(obj, 'x') # 有属性'x'吗? True
setattr(obj, 'y', 19) # 设置一个属性'y'
getattr(obj, 'y') # 获取属性'y',如果不存在此属性会报异常
getattr(obj, 'z', 404) # 获取属性'z',如果不存在,返回默认值404,

实例属性和类属性

class Student(object):
name ='fengyong' #类的属性 stu = Student()
stu.name #fengyong
stu.name = 'new Name'
stu.name #new Name
del(stu.name) #删除绑定的属性
stu.name #fengyong 类属性的值

从上面的例子可以看出,在编写程序的时候,千万不要对实例属性和类属性使用相同的名字,因为相同名称的实例属性将屏蔽掉类属性,但是当你删除实例属性后,再使用相同的名称,访问到的将是类属性

python-6面向对象编程的更多相关文章

  1. python基础——面向对象编程

    python基础——面向对象编程 面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的 ...

  2. Python之面向对象编程学习

    不知不觉,学到了python的面向对象编程思想.今天我们来讨论下面向对象编程的思想. 顾名思义,面向对象,就是面向于对象,这里所说的对象不是你现实生活中你的女朋友,你的老婆,你的爱人,在编程的世界里面 ...

  3. Python:面向对象编程3 定制类(有更新)

    Python:面向对象编程3  定制类(有更新) ⚠️本文主要内容为对Data model相关知识点的提取学习记录.(内容来自文档和部分网页教程案例) ⚠️:这个连接指向<流畅的python&g ...

  4. python基础-面向对象编程

    一.三大编程范式 编程范式即编程的方法论,标识一种编程风格 三大编程范式: 1.面向过程编程 2.函数式编程 3.面向对象编程 二.编程进化论 1.编程最开始就是无组织无结构,从简单控制流中按步写指令 ...

  5. python之面向对象编程

    1.面向对象介绍: 世界万物,皆可分类 世界万物,皆为对象 只要是对象,就肯定属于某种类 只要是对象,就肯定有属性 2. 面向对象的几个特性: class类: 一个类即对一类拥有相同属性的对象的抽象, ...

  6. Python(面向对象编程—1)

    class tst: l=[] x=1 a=tst() b=tst() a.l.append('a') b.l.append('b') a.x='a' b.x='b' print(a.l,a.x) # ...

  7. python的面向对象编程

    面向对象编程是一种程序的范式,它把程序看成是对不同对象的相互调用,对现实世界建立的一种模型. 面向对象编程的基本思想,类和实例.类用于定义抽象对象,实例根据类的定义被创建出来. 在python当中我们 ...

  8. 一文看懂Python的面向对象编程

    之前在网络上看了很多关于面向对象的编程详解,还是不够过瘾,所以决定自己动手写一篇. 面向对象:Object Oriented Programming,简称OOP,即面向对象程序设计. 类(Class) ...

  9. python学习——面向对象编程

    关于python面向对象编程,请参考: https://blog.csdn.net/zhoudaxia/article/details/23341261

  10. Python基础 — 面向对象编程基础

    目录 1. 面向对象编程基础 2. 定义类和创建对象 3. init() 方法 4. 魔法方法 5. 访问可见性问题 5. 练习 1. 面向对象编程基础 把一组数据结构和处理它们的方法组成对象(obj ...

随机推荐

  1. TX Text Control X10新特性之图像占位符合并

    文档处理控件TX Text Control即将发布的X10版本,将升级重点还是放到了其比较优势的流式布局报表设计和生成上.慧都获得了来自其开发商Text Control GmbH公司的一手资料,迫不及 ...

  2. 在windows bat脚本(batch)中延时

    编写bat脚本时,有事我们希望在指令和指令之间,加入延时.例如当一条指令执行后,windows需要一定时间来响应的情况. 以下是一种实现方法,通过ping 指令来实现,5表示ping5次,就是延时5秒 ...

  3. [转载]在VB.Net中获取COM对象的特定实例(Getting a specific instance of COM object in VB.Net)

    转载:http://www.it1352.com/534235.html 问题: I am writing a Windows Form application in .Net to list all ...

  4. MD5的32位加密方法

    /// <summary> /// MD532位加密方式 /// </summary> /// <param name="str">用户原始密码 ...

  5. 制作URL以GET方式提交的简单加密程序

    首先我们用到的是 DESCryptoServiceProvider 类 对此微软给出的解释是 定义访问数据加密标准 (DES) 算法的加密服务提供程序 (CSP) 版本的包装对象.无法继承此类. 接下 ...

  6. 一篇SSM框架整合友好的文章(二)

    上一篇讲述了DAO 层,mybatis实现数据库的连接,DAO层接口设计,以及mybtis和spring的整合.DAO层采用接口设计方式实现,接口和SQL实现的分离,方便维护.DAO层所负责的仅仅是接 ...

  7. IDEA的使用方法(一)(IDEA基本快捷键)

    一个软件的快捷键显得尤为重要,接下来来讲讲快捷键 CTR+N 搜索类 CTR+SHIT+N 搜索文件 CTR+ALT+空格 代码提示(类似于 ALT+/) ALT+F7 查询在某处使用 CTR+Q 查 ...

  8. LeetCode969. 煎饼排序

    问题:969. 煎饼排序 给定数组 A,我们可以对其进行煎饼翻转:我们选择一些正整数 k <= A.length,然后反转 A 的前 k 个元素的顺序.我们要执行零次或多次煎饼翻转(按顺序一次接 ...

  9. opendaylight安装

    OpenDaylight安装 环境 jdk-1.8 maven 环境配置安装 Java环境 查看Java环境 java  -version 安装jdk-1.8 yum install java-1.8 ...

  10. Java OOP——JAVA关键字与保留字说明及使用

    1.abstract abstract 关键字可以修改类或方法. abstract 类可以扩展(增加子类),但不能直接实例化. abstract 方法不在声明它的类中实现,但必须在某个子类中重写. - ...