小甲鱼python课后题和答案简书_小甲鱼——类和对象P1-2笔记

对象:属性(静态特征)和方法(动态动作)

类和对象的关系

eg.盖房子

图纸是类,按照图纸盖的每栋房子为对象

面向对象的特征

封装:把数据和函数代码都封装到一起

继承:子类共享父类的属性和方法

class Mylist(list):

pass

多态:不同对象对同一方法响应不同的行动

eg. 移动:不同动物有不同的移动方式,如乌龟是爬,老虎是跑...

多个类具有同一种方法,但是实例化后的对象调用该方法实现不同的结果。

self

刚才的例子中,类是图纸,对象是按照图纸盖的每栋房子,那么self 就是每栋房子的门牌号,可以区分不同的房屋。

当一个对象的方法被调用时,对象将自身作为第一个参数传给self,程序接收到self之后就知道是哪个对象在调用类的方法。

class Ball:

def setName(self,name):

self.name = name

def fun(self):

print("我叫%s,..." % self.name)

结果如下:

In[1]: a = Ball()

In[2]: a.setName('球A')

In[3]: a.fun()

my name is 球A

In[4]: b = Ball()

In[5]: b.setName('球B')

In[6]: b.fun()

my name is 球B

实例化对象球A和球B,对它们分别调用fun函数,print的结果是不同的。

过程如下:

调用a.fun()时,实际上a已经通过隐藏的self参数传入类对象中,类对象的self就接收到了,self.name就会找到a对象的name,进行接下来的操作。

魔法方法

__init__ (self) # 构造方法

eg.

class Ball:

def __init__(self, name):

self.name = name

def fun(self):

print('my name is %s' % self.name)

结果如下:

In[1]: a = Ball('球A')

In[2]: a.fun()

my name is 球A

使用该魔法方法与之前有什么差别呢?

——可以在实例化对象的时候直接给name赋值。

公有与私有

在Python中定义私有变量只需要在变量名或函数名前添加两道下划线,这个函数或变量就变成了私有的了。

class Person:

name = 'a'

In[2]: p = Person()

In[3]: p.name # 不要加括号!!!

Out[3]: 'a'

如果在name前加__,该属性就变成了私有的,按普通方法无法调用,所以可以加一个函数,通过该函数调用属性

class Person:

__name = 'a'

def getName(self):

return self.__name

In[5]: q = Person()

In[6]: q.getName()

Out[6]: 'a'

# 用以下方法也行

In[7]: q._Person__name

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值