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. php支付走过的坑(支付宝篇 注册 秘钥 环境等等配置)

    支付这东西,说容易也容易,说难也难 代码这玩意还比较好说 但是 如果没有demo 直接去看官方文档 十有八九一脸懵逼 今天就整理一下 支付这块走过的坑 涉及 微信h5支付 支付宝h5支付 (api文档 ...

  2. sudoers文件解析

    分类: LINUX 今天在用户组中新加了一个普 通用户,开始这个用户没有sudo权限,于是通过sudo visudo修改了sudo的配置文件,赋予了普通用户的root权限.后来想着能不能将/etc/s ...

  3. vm中efi模式安装windows10

    选择dvd: 界面出现“Press any key to boot from CD or DVD”时,再迅速按下任意键就OK了.

  4. May 8th 2017 Week 19th Monday

    Art lies in concealing art. 隐而不露即艺术. Sometimes, concealing is much more seductive than totally naked ...

  5. java研发常见问题总结2

    1. String.StringBuffer与StringBuilder之间区别 关于这三个类在字符串处理中的位置不言而喻,那么他们到底有什么优缺点,到底什么时候该用谁呢?下面我们从以下几点说明一下 ...

  6. dd-wrt ddns更新失败由于电信提供的ip不是公网ip

    由于电信提供的ip地址原来是公网的ip,后来电信通过nat提供一个内网ip,导致ddns更新失败.电话给电信客服10000号,让他们修改回来之后就可以了. 如果ddns更新失败,尤其是原本是正常的,后 ...

  7. C++学习之拷贝构造函数

    嘛是拷贝构造函数? 如果一个构造函数的第一个参数是’自身类‘ ‘类型’的引用,且任何额外参数都有默认值,则此构造函数是拷贝构造函数.如: [代码1] 1 2 3 4 5 6 class A{ publ ...

  8. 【转】NodeJS教程--基于ExpressJS框架的文件上传

    本文是翻译的一篇文章,原文地址:Handle File Uploads in Express (Node.js). 在NodeJS发展早期上传文件是一个较难操作的功能,随后出现了formidable. ...

  9. centos 开启http代理tinyproxy

    一.前言 就算有一些公司想到要进行压力测试也是用一些微软,官网出的一些软件,一个ip发起很多访问.等有一天黑客攻击来了发现还是顶不住.华盟君认为知此知彼才是压力测试的关键点,应当模拟黑客手法进行压力测 ...

  10. 2017.11.24 算法分析与设计------Gay格雷码

    1. 格雷码问题: 对于给定的正整数n,格雷码为满足如下条件的一个编码序列: (1) 序列由2n个编码组成,每个编码都是长度为n的二进制位串. (2) 序列中无相同的编码. (3) 序列中位置相邻的两 ...