码迷,mamicode.com
首页 > 其他好文 > 详细

【Pyton】【小甲鱼】类和对象

时间:2017-03-12 13:37:31      阅读:426      评论:0      收藏:0      [点我收藏+]

标签:ima   接收   第一个   gre   间接   理解   成功   turtle   改名   

一、类

 

定义一个类,例子如下:

 1 class Turtle: #定义一个名为Turtle的类,Python中类型约定以大写字母开头
 2     #属性
 3     color=green
 4     weight=10
 5     legs=4
 6     shell=True
 7     mouth=大嘴
 8 
 9     #方法
10     def climb(self):
11         print(我正在很努力的向前爬……)
12     def run(self):
13         print(我正在飞快的向前跑……)
14     def bite(self):
15         print(咬死你咬死你!)
16     def eat(self):
17         print(邮的吃,真满足~)
18     def sleep(self):
19         print(困了,睡了,晚安,Zzzzz)

【属性+方法-->实例化对象】

定义一个对象,调用类中方法:

1 >>> tt=Turtle()
2 >>> tt.climb #未调用成功,内存中调用一个实例对象,系统会自动给释放
3 <bound method Turtle.climb of <__main__.Turtle object at 0x020105B0>>
4 >>> tt.climb()
5 我正在很努力的向上爬

二、

技术分享

1.封装:信息隐蔽技术

1 >>> list1=[2,1,7,5,3]
2 >>> list1.sort()
3 >>> list1
4 [1, 2, 3, 5, 7]
5 >>> list1.append(9) #append方法我们知道应用后可以达到什么效果但是却不知道它的实现原理,那么这样的方法就是封装起来的
6 >>> list1
7 [1, 2, 3, 5, 7, 9]

 

2.继承

 1 #创建一个list类型的类
 2 >>> class MyList(list):
 3     pass  #pass的意思,pass是一个占位符,不做任何事情,此类是一个list(列表)
 4 #创建一个list2对象
 5 >>> list2=MyList()
 6 >>> list2.append(5)
 7 >>> list2.append(3)
 8 >>> list2.append(7)
 9 >>> list2
10 [5, 3, 7]
11 >>> list2.sort()
12 >>> list2
13 [3, 5, 7] #这里实现了排序方法,所以list2继承了Mylist()中的list的方法

3.多态:不同对象对同一方法相应不同的行动

   【概念理解】奔跑:老鼠、袋鼠、乌龟对于同一个跑的动作都是表现不同的行为的。

 1 >>> class A:
 2     def fun(self):
 3         print(我是小A)
 4 
 5 >>> class B:
 6     def fun(self):
 7         print(我是小B)
 8 
 9         
10 >>> a=A()
11 >>> b=B()
12 >>> a.fun()
13 我是小A
14 >>> b.fun()
15 我是小B

 4.self:相当于不同对象的门牌号。python中调用时候第一个写self是约定俗成的要求(虽然通过同一个类创建的出不同对象,但是通过self可以区别各个对象。)

调用对象原理:来源于同一个属性和方法,当一个对象被调用,对象会把自身作为第一个参数传给self,接收到self(self作为对象的标志,区别不同对象),python通过对象传过来的self知道是哪个对象在调用方法。

 1 >>> class Ball:
 2     def setName(self,name): #self相当于字典中的key,name相当于字典中的值,所以括号中实际上只传name的值即可。
 3         self.name=name
 4     def kick(self): #调用setName()方法中的self,即取出self.name的值
 5         print(我叫%s,该死的,谁踢我...%self.name)
 6 
 7         
 8 >>> a=Ball()
 9 >>> a.setName(球A)
10 >>> b=Ball()
11 >>> b.setName(球B)
12 >>> c=Ball()
13 >>> c.setName(土豆)
14 >>> a.kick()
15 我叫球A,该死的,谁踢我...
16 >>> c.kick()
17 我叫土豆,该死的,谁踢我...

5.Python的魔法方法:

1)__init__(self):构造方法,实例化一个对象时,方法在对象被创建时候自动被调用。不用给对象中各方法中变量分别赋值,只初始化一次赋值即可。例子代码如下:

 1 >>> class Ball:
 2     def __init__(self,name): #应用__init__函数
 3         self.name=name
 4     def kick(self):
 5         print(我叫%s,该死的,谁踢我...%self.name)
 6 
 7         
 8 >>> b=Ball(土豆)#初始化赋值
 9 >>> b.kick()
10 我叫土豆,该死的,谁踢我...

6.共有和私有

在属性前面加双下划线‘__’可以使属性变成私有属性(原理:其实是Python动了手脚,python会将加双下划线的变量改名为‘_类名__变量名’,所以仍旧可以通过方法进行访问,所以Python类是没有权限控制的,所以实际上是伪私有),那么对象在进行方法调用的时候不可以直接调用该私有属性。可以通过在方法中再利用调用函数来调用,然后外部对象再调用此方法,从而间接的调用出此属性。(下方有举例)

 1 #共有属性:
 2 >>> class Person:
 3     name=小甲鱼
 4 
 5 >>> p=Person()
 6 >>> p.name
 7 小甲鱼
 8 #私有属性,调用报错
 9 >>> class Person:
10     __name=小甲鱼
11 
12 >>> p=Person()
13 >>> p.__name
14 Traceback (most recent call last):
15   File "<pyshell#75>", line 1, in <module>
16     p.__name
17 AttributeError: Person object has no attribute __name
18 #私有属性中写入内部调用方法实现间接调用私有方法
>>> class Person:
    __name=小甲鱼
    def getName(self):
        return self.__name

    
>>> p=Person()
>>> p.getName()
小甲鱼
1 #了解Python私有属性改名原理后进行再次访问尝试
2 >>> class Person:
3     __name=小甲鱼
4 
5     
6 >>> p=Person()
7 >>> p._Person__name
8 小甲鱼

 

 

【Pyton】【小甲鱼】类和对象

标签:ima   接收   第一个   gre   间接   理解   成功   turtle   改名   

原文地址:http://www.cnblogs.com/zhuzhubaoya/p/6537333.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!