对象是什么?对象就是可以抱在怀里使劲揉,然后吃钱的小祖宗,她是怎么构成的,爱钱+任性 = 对象。在Python里也一样 对象=属性+方法。
是不是有种异曲同工之妙呢?答案是有个屁!
属性其实就是变量,方法就是咱们学过的函数,这样一想还是有联系的
如一个对象的特征叫做属性并且一个对象的行为叫做方法
看代码
小乌龟源代码
class Turtle:
#python 中的类名约定以大写字母开头
#特征的描述称为属性,在代码层次来看其实就是变量
color = "green"
weigth = 10
legs = 4
shell = True
mouth = '大嘴'
#方法实际就是函数,通过调用这些函数来完成某些工作
def climb(self):
print("我正在努力地往前爬")
def run(self):
print("我正在飞快的像前爬")
def bite(self):
print("咬死你咬死你")
def eat(self):
print("有吃的了")
def sleep(self):
print("困了,睡觉了,告辞")
调用
>>> tt = Turtle()
>>> tt.climb()
我正在努力地往前爬
>>>
笔记;
在源代码的层次上,还不叫一个对象,而是称源代码为一个class类,大家可能会注意到定义一个函数后跟了个陌生的参数(self)这个是什么呢?
在同一个class类里会生成无数个对象,也就是咱们常听到的面对修修爱那个编程,调用对象里的方法与函数也一样,先举个例子,理解下self的重要性
>>> aa = Buall()
>>> aa.setName("woshi")
>>> bb = Buall()
>>> bb.setName("天钧")
>>> aa.kick()
我叫woshi,奥 我是谁?!
>>> bb.kick()
我叫天钧,奥 我是谁?!
>>>
类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称,但是在调用这个方法的时候你不为这个参数赋值,python会提供这个值。这个特别的变量指对象本身,按照惯例它的名称是self。 虽然你可以给这个参数任何名称,但是 强烈建议 你使用self这个名称——其他名称都是不赞成你使用的。使用一个标准的名称有很多优点——你的程序读者可以迅速识别它,如果使用self的话,还有些ide(集成开发环境)也可以帮助你。
现在我们先记住一个class类必须有一个好基友self
初探Python魔法方法
从前有个魔仙堡,里面有着许多的Python对象,他们天生就会魔法,所以他们把握着面对对象,他们会给你的类增加魔力,是不是很神奇呢?
Python的魔法方法都是用两个下划线封印起来的,还是很好辨认
法术__init__()构造方法。
__init__方法的魔力体,现在只要实例化一个对象,这个方法就会在对象被创建时自动调用,其实实例化对象时是可以传入参数的,这些参数会自动传入__init__()方法中,可以通过重写这个方法来自定义独享的初始化操作。
class Potato:
def __init__(self,name):
self.name = name
def kick(self):
print("我叫%s,奥我擦" % self.name)
运行为
>>> ss = Potato("卧槽卧槽")
>>> ss.kick()
我叫卧槽卧槽,奥我擦
实例化对象,你懂了多少,就是class带参数嘛,先存疑,魔法方法讲
公有与私有
一般的面对对象编程语言都会区分公有与私有的数据类型,像C++和Java他们的public和private关键字,用于声明数据是公有还是私有,但在Python中并没有用类似的关键词来修饰,所以本章到这里就结束了,告辞
默认上的对象属性和方法都是公开的,就像衣不隐体的美少女那样,可以通过(.)来访问。万恶之源
源代码
class Potato:
name = "卧槽,臭流氓"
运行后
>>> cc = Potato()
>>> cc.name
'卧槽,臭流氓'
为了实现私有变量,Python有个name mangling的技术(不是我说的,小甲鱼说得,我也没听过在变量名或者函数名前添加__两个英文的下划线,那么这个函数或者变量就是私有的了,不就是“半封印”嘛,魔法方法是全封印,秒懂,我真是机智的一比
源代码
class Potato:
__name = "卧槽,臭流氓"
运行后
>>> cc = Potato()
>>> cc.__name
Traceback (most recent call last):
File "<pyshell#38>", line 1, in <module>
cc.__name
AttributeError: 'Potato' object has no attribute '__name'
那没法访问了丫,咋办,从内部访问
源代码
class Potato:
def __init__(self,name):
self.__name = name
def getName(self):
return self.__name
运行
>>> o = Potato("天钧")
>>> o.__name
Traceback (most recent call last):
File "<pyshell#45>", line 1, in <module>
o.__name
AttributeError: 'Potato' object has no attribute '__name'
>>> o.getName()
'天钧'
>>>
还可以这样哦
>>> o._Potato__name
'天钧'