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. angular2-搭建环境

    npm  模块将被下载安装到[全局目录]中.[全局目录]通过 npm config set prefix "目录路径" 来设置.通过 npm config get prefix 来 ...

  2. 对MVVM思想的在认识

    如果说MVP是对MVC的进一步改进,那么MVVM则是思想的完全变革.它是将“数据模型数据双向绑定”的思想作为核心,因此在View和Model之间没有联系,通过ViewModel进行交互,而且Model ...

  3. form提交

    方法一:利用form的onsubmit()函数(经常使用) <script type="text/javascript"> function validateForm( ...

  4. C++基础--sizeof和strlen的区别

    首先,来运行一段程序: #include "stdafx.h" #include <stdio.h> #include <string.h> int mai ...

  5. Design Pattern ->Abstract Factory

    Layering & Contract Philosophy With additional indirection Abstract Factory //The example code i ...

  6. nProtect APPGuard安卓反外挂分析

    工具与环境: IDA7.0 JEB2.2.5 Nexus 5 Android 4.4 目录: 一:app简单分析与java层反编译 二: compatible.so反调试与反反调试 三: compat ...

  7. Java集合集锦

    1.介绍Collection框架的结构 集合是Java中的一个非常重要的一个知识点,主要分为List.Set.Map.Queue三大数据结构.它们在Java中的结构关系如下: Collection接口 ...

  8. POJ-2376 Cleaning Shifts---区间覆盖&贪心

    题目链接: https://vjudge.net/problem/POJ-2376 题目大意: farmer John要安排他的牛清理牛棚,一共有T个牛棚要清理,每头牛可以清理相邻的牛棚.比如,一头牛 ...

  9. 2019.03.15 ZJOI2019模拟赛 解题报告

    得分: \(20+45+15=80\)(三题暴力全写挂...) \(T1\):Lyk Love painting 首先,不难想到二分答案然后\(DP\)验证. 设当前需验证的答案为\(x\),则一个暴 ...

  10. 快算24点,POJ(3983)

    题目链接:http://poj.org/problem?id=3983 中文题,就不解释题意了. 类似之前的一篇博客,这里也不上解释了,直接上代码吧. #include <iostream> ...