博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++程序员学Python:Python里面的面向对象
阅读量:6214 次
发布时间:2019-06-21

本文共 1593 字,大约阅读时间需要 5 分钟。

python里面也引入了面向对象的方法,除了一些C++的基本概念,还有其他一些不同,例如python的类有时候可以作为一个命名空间

1 class MyData(object):2     pass

python的继承语法是class class_name(parent_class_name),所以上面的MyData对象继承与object对象,至于object对象,则是python的内置对象,暂且不谈

 

上面的就是声明了一个空类,但是和C++不同的是,这个类本身可以当作一个命名空间使用,例如:

1 mathObj = MyData()2 mathObj.x = 43 mathObj.y = 54 mathObj.x + mathObj.y

 

这个时候mathObj更多只是作为一个命名空间使用

当我们需要定义一个成员函数的时候:

1 class MyData(object):2     def printFoo(self):3         print "you invoked printFoo()"4     def printFoo2():5         print "you invoked printFoo2()"

printFoo2的定义是错误的,调用成员函数printFoo2的时候,解释器会报错,因为他定义形参self,self就是C++里面的this,不过C++在我们定义成员函数的时候,会自动帮我们生成,不用像python这样手动生成(还是我不知道??),我们调用一个成员函数,python和C++也都会自动帮我们传递类对象,所以当我们调用printFoo2的时候,解释器帮我们传递self对象,但是printFoo2并没有定义这个形参

 

当然,python里面的类也有构造函数和析构函数,与C++不同的是,python的构造函数是__init__,析构函数是__del__

1 class MyData(object):2     def __init__(self):3         print "init"4     def __del__(self):5         print "del"
 
1 obj = MyData()2 init3 obj = 24 del

当我们创建obj的时候,会调用__init__函数,当把obj指向其他的数据的时候,python启动垃圾回收机制,Mydata对象被删除了,同时也调用了__del__函数

 

python还有一个比较注意的,就是创建类的时候会有一个同名的实例,例如我们有如下的类:

1 class C(object):2     foo = 100

如果我们输入print C.foo,那么解释器会输出100,如果我们输入C.foo = C.foo+1,那么C.foo会变成101,这时候如果我们b = C(),那么print b.foo会发现输出的是101,这是因为foo在这里实际上是一个静态变量,类似于C++在类里面定义了一个static int foo

但是如果我们的C里面定义了一个function,我们调用C.function()会怎么样,会报错,这点跟foo不同,这个是因为function还没有和一个类去绑定

 

在C++里面如果我们需要拿到一个类的信息,可以利用typeof,而python里面也有类似的功能,不过需要类继承自object

有如下的:

__name__:类名

__doc__:类的文档

__bases__:所有父类构成的元组

__dict__:类的属性

__module__:类所在的模块

__class__:对应的类

 

转载于:https://www.cnblogs.com/linyilong3/archive/2013/03/10/2952826.html

你可能感兴趣的文章
springboot 注入xml自定义类
查看>>
标准之路网站上一篇文章《十天学会web标准(div+css)》的营养精华
查看>>
h5+css3最简单的图片飞入以及淡入淡出效果
查看>>
Instance Variables in ruby
查看>>
android实现触摸屏校准
查看>>
laravel 的安装
查看>>
jquery mobile validation
查看>>
uml 各种箭头的意思
查看>>
Dynamics 365/CRM 实体设计技巧
查看>>
Linux系统tree工具
查看>>
python之list+字典练习
查看>>
django-cbv模式-csrf中间件
查看>>
xcode xib 加载 、注意点
查看>>
Spring---Bean的继承与依赖
查看>>
LVS模式二:隧道模式(Tun)
查看>>
rsync 同步
查看>>
骑士问题 C组模拟赛
查看>>
设计 C组模拟赛
查看>>
Other things
查看>>
JZOJ 100046. 收集卡片
查看>>