根据操作数据的函数或语句块来设计程序的,被称为面向过程的编程。

把数据和功能结合起来,用称为对象的东西包裹起来的组织程序的方法,称为面向对象的编程理念。

类和对象是面向对象编程的两个主要方面。类创建一个新类型,而对象是这个类的实例

属于一个对象或类的变量被称为

对象可以使用属于类的函数来具有功能,这样的函数被称为类的方法。

域和方法可以合称为类的属性。

有两种类型--属于每个实例/类的对象或属于类本身。分别被称为实例变量和类变量。

类使用class关键字创建。类的域和方法被列在一个缩进块中。

self

的方法与普通的函数只有一个特别的区别:它们有一个额外的第一个参数名称,但是在调用这个方法的时候你不为这个参数赋值,python会提供这个值。这个特别的变量指对象本身,按照惯例它名称是self。

创建一个类

class Person:
pass p = Person()
print p

输出:

<__main__.Person instance at 0xf6fcb18c>

class语句后跟类名,创建了一个新的类。后面跟着一个缩进的语句块形成类体。

后面类名后跟一对圆括号来创建一个对象/实例。

对象的方法

类/对象可以拥有像函数一样的方法,这些方法与函数的区别只是一个额外的self变量。

class Person:
def sayHi(self):
print 'Hello,how are you?' p = Person()
p.sayHi()

注意sayHi方法没有任何参数,但仍然在函数定义时有self

__init__方法

__init__方法在类的一个对象被建立时,马上运行。这个方法可以用来对你的对象做一些你希望的初始化。注意,这个名称的开始和结尾都是双下划线。

class Person:
def __init__(self,name):
self.name = name
def sayHi(self):
print 'Hello,my name is',self.name p = Person('Swaroop')
p.sayHi()

结果:

Hello,my name is Swaroop

有两种类型的域:类的变量对象的变量

类的变量由一个类的所有对象(实例)共享使用。只有一个类变量的拷贝,所以当某个对象对类的变量做了改动的时候,这个改动会反映到所有其他的实例上。

对象的变量由类的每个对象/实例拥有。每个对象有自己对这个域的一份拷贝,即他们不是共享的。

#!/usr/bin/python
#Filename:objvar.py class Person:
'''Represents a person.'''
population= def __init__(self,name):
'''Initializes the person's data.'''
self.name = name
print '(Initializing %s)'%self.name #when this person is created,he/she
#adds to the population
Person.population+= def __del__(self):
'''I am dying.'''
print '%s says bye.' %self.name Person.population -= if Person.population == :
print'I am the last one.'
else:
print 'There are still %d people left.'%Person.population def sayHi(self):
'''Greeting by the person. Really,that's all it does.'''
print 'Hi,my name is %s.'%self.name def howMany(self):
'''Prints the current population.'''
if Person.population == :
print 'I am the only person here.'
else:
print'We have %d persons here.'% Person.population swaroop = Person('Swaroop')
swaroop.sayHi()
swaroop.howMany() kalam = Person('Abdul Kalam')
kalam.sayHi()
kalam.howMany() swaroop.sayHi()
swaroop.howMany()

结果:

(Initializing Swaroop)
Hi,my name is Swaroop.
I am the only person here.
(Initializing Abdul Kalam)
Hi,my name is Abdul Kalam.
We have persons here.
Hi,my name is Swaroop.
We have persons here.

说明:population属于Person类,因此是一个类的变量。name变量属于对象(它使用self赋值)因此是对象的变量。

记住:

Python中所有的类成员(包括数据成员)都是公共的,所有的方法都是有效的。

例外:你使用的数据成员名称以双下划线前缀比如__privatevar,Python的名称管理体系会有效地把它作为私有变量。

这是一个惯例,如果某个变量只想在类或对象中使用,就应该以单下划线前缀。而其他的名称都将作为公共的,可以被其他类/对象使用。

最新文章

  1. JSPatch 中 defineClass 中覆盖方法的使用
  2. Vue.js学习笔记(4)
  3. 【vscode】如何在vscode 中配置:TypeScript开发node环境
  4. 洛谷U5653 宋荣子的小饼干
  5. Java基础之一组有用的类——为标记定义自己的模式(ScanString)
  6. phpStudy(lnmp)集成环境安装
  7. 使用Office2007向cnblogs.com发布文章
  8. Oracle树反向查询的优化(转载)
  9. DV工作流
  10. C#设计模式之六原型模式(Prototype)【创建型】
  11. 【LSGDOJ 1850】滑雪课程
  12. R 网络图 nodes,edges属性计算
  13. ASP.NET Core 中断请求了解一下(翻译)
  14. mysql知识点汇总
  15. C#中基于GDI+(Graphics)图像处理系列
  16. 学习 Spring (一) Spring 介绍
  17. Vue Resource root options not used?
  18. 【DB2】SQL1585N 由于没有具有兼容页面大小的可用系统临时表空间,因此无法创建临时表。SQLSTATE=54048
  19. SSH--完全分布式主机设置【克隆过安装过Hadoop的主机后】
  20. sqler sql 转rest api 源码解析(四)macro 的执行

热门文章

  1. 【Mac + Python3.6 + ATX基于facebook-wda】之IOS自动化(三):facebook-wda库--API学习以及附录:Github上对WDA的问题解答
  2. tree 命令使用技巧
  3. java为啥计算时间从1970年1月1日开始
  4. python 糗事百科实例
  5. (转)SQL执行顺序
  6. [LAMP]安装-Debian
  7. boost诊断工具BOOST_ASSERT、BOOST_VERIFY、BOOST_STATIC_ASSERT
  8. (推荐JsonConvert )序列化和反序列化Json
  9. Cannot call sendRedirect() after the response has been committed错误;
  10. 编写高质量代码--改善python程序的建议(三)