首页 > 代码库 > 【Pyton】【小甲鱼】类和对象
【Pyton】【小甲鱼】类和对象
一、类
定义一个类,例子如下:
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】【小甲鱼】类和对象
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。