鱼C论坛

 找回密码
 立即注册
查看: 2035|回复: 0

[技术交流] 35 类和对象:面向对象编程 - 景命

[复制链接]
发表于 2017-8-17 17:18:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
知识点:

一、self是什么?
        Python中的self相当于c++的this指针
        作用:同一个类可以生成很多个对象,当一个对象调用方法的时候,对象会将自身作为第一个参数,传给self参数。在接收到self参数后,Python就知道是哪一个对象在调用方法。


例:
>>> class Ball():
        def setName(self,name):
                self.name = name
        def kick(self):
                print("我叫%s,该死的谁在踢我!" % self.name)

                
>>> a = Ball()
>>> a.setName("小明")                #可以理解为 a.setName(a,"小明")
>>> b = Ball()
>>> b.setName("老明")
>>> a.kick()
我叫小明,该死的谁在踢我!
>>> b.kick()
我叫老明,该死的谁在踢我!




二、Python中的魔法方法。
        被双下划线包围的方法,如 __init__(self)。
        __init__(self)方法又叫做构造方法。构造方法在对象被创建的时候被调用,默认为无参的。

例:
class Ball:
    def __init__(self,name):     #将构造方法__init__()中加入另一个参数,来代替setName方法
        self.name = name
    def kick(self):
        print("我叫%s,该死的谁踢我!" % self.name)
a = Ball("小明")                #在对象被创建的时候必须在括号内加入参数,否则会引发异常。
a.kick()
当然在定义构造方法的时候,也可以将新加入的参数定义为默认参数,这样可以避免报错。





三、公有和私有
        Python中没有像C、java中用public和private这样的关键字来定义方法和属性是公有的还是私有的。
        Python中的属性和方法默认上都是公有的,我们可以通过点操作符(.)来访问。
        在Python中定义私有变量只需要在变量名或者函数名前面加上双下划线"__",那么这个函数或者变量就会成为私有的了。

例:
>>> class Person:
        __name = "小明"                #在这里将属性name定义为私有的。

>>> p = Person()
>>> p.name                                #此时在类外访问会报异常。
Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    p.name
AttributeError: 'Person' object has no attribute 'name'

当不用方法返回的方式也可以用(_类名__变量名)这种方式来访问私有的变量名。所有就目前来说Python的私有机制其实就是伪私有。Python的类是没有权限控制的。所以变量是可以外部调用的。
>>> class Person:
        __name = "小明"

>>> p = Person()
>>> p._Person__name                 #其实就是将(__name = "小明")写为(p._Person__name )。
'小明'

评分

参与人数 1鱼币 +5 收起 理由
小甲鱼 + 5

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 19:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表