鱼C论坛

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

[技术交流] python入门L37类和对象

[复制链接]
发表于 2017-7-30 21:02:39 | 显示全部楼层 |阅读模式

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

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

x
OOA:面向对象分析
OOP:面向对象编程
OOD:面向对象设计
self是什么?
python的self相当于C++的this指针
类是图纸,类实例化后的对象才是能住人的房子
同样的图纸可以建造出很多房子,这些房子长得都差不多,但是它们都有不同的主人,self就相当于每个房子的牌号。
python的self是同一个道理,由同一个类可以生成无数个对象,这些对象都很相似,因为它们都来源于同一个类的属性和方法,当一个对象的方法被调用的时候,对象会将自身作为第一个参数传给self这个参数,接受到self的时候python就知道是哪一个对象在调用方法了
>>> a=Ball()
>>> a.setname('Ball A')
>>> b=Ball()
>>> b.setname('Ball B')
>>> c=Ball()
>>> c.setname('potato')
>>> a.kick()
我叫Ball A,该死的,谁踢我。。。
>>> c.kick()
我叫potato,该死的,谁踢我。。。

你听说过python的魔法方法吗?
据说,python的对象天生拥有一些神奇的方法,他们是面向对象的python的一切。他们是可以给你的对象增加魔力的方法。如果你的对象实现了这些方法中的某一个,那么这个方法就会在特殊情况下被python所调用,而这一切都是自动发生的…….
Python 的这些方法都会被双下划线所包围

1  __init__(self) ---构造方法
魔力在于,在对象实例化的时候,init方法就会在对象被创建的时候自动被调用。
实例化对象的时候可以传入参数,这些参数会自动的出入init方法中
>>> class Ball:
        def __init__(self,name):
                self.name=name
        def kick(self):
                print("我叫%s,该死的,谁踢我。。。"% self.name)

               
>>> b=Ball('potato')
>>> b.kick()
我叫potato,该死的,谁踢我。。。
>>> c=Ball()  #如果不设置默认参数,无参数输入会报错,所以在类的方法中先设置默认参数。
Traceback (most recent call last):
  File "<pyshell#52>", line 1, in <module>
    c=Ball()
TypeError: __init__() missing 1 required positional argument: 'name'

2公有和私有
>>> p=Person()
>>> p.name
'turtle'
此处通过‘.’来访问对象的一个属性
为了实现对象的私有特征,python中有一个name mangling技术(名字改编,名字重整)。在python中定义私有变量只需要在变量名或函数名前加上“__”两个下划线,那么这个函数或变量就会为私有的了。
>>> class Person:
        __name='turtle'
>>> p= Person()
>>> p.__name
Traceback (most recent call last):
  File "<pyshell#61>", line 1, in <module>
    p.__name
AttributeError: 'Person' object has no attribute '__name'
>>> p.name
Traceback (most recent call last):
  File "<pyshell#62>", line 1, in <module>
    p.name
AttributeError: 'Person' object has no attribute 'name'
__name 在外部就不能被访问了,只能在内部被访问。
>>> class Person:
        __name='turtle'
        def getname(self):
                return self.__name

>>> p=Person()
>>> p.getname()
'turtle'
实际上python的name mangling就是将__变量名 自动改编为_类名__变量名 (伪私有)
>>> p._Person__name
'turtle'

评分

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

查看全部评分

本帖被以下淘专辑推荐:

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 13:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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