【python36--对象】

时间:2023-03-09 05:24:38
【python36--对象】

1、对象=属性+方法

2、实例化对象

#类名称首字母大写
class Turle:
#属性
color = 'green'
weight = 10
legs = 4
shell = True
mouth = '大嘴' #方法
def climb(selt):
print('我正在很努力的向前爬。。。。。')
def run(self):
print('我正在飞快的向前跑。。。。。')
def bite(self):
print('咬死你咬死你!!')
def eat(self):
print('有的吃,真满足。')
def sleep(self):
print('困了,睡了,晚安.Zzzz') >>> tt = Turle() #实例化对象
>>> tt.climb()
我正在很努力的向前爬。。。。。
>>> tt.run()
我正在飞快的向前跑。。。。。
>>> tt.bite()
咬死你咬死你!!
>>> tt.eat()
有的吃,真满足。

3、oo(面向对象)的特征:

--封装(对象封装了属性)

>>> list1 = [2,1,7,5,3]
>>> list1.sort() #正序排列
>>> list1
[1, 2, 3, 5, 7]
>>> list1.append(9)
>>> list1
[1, 2, 3, 5, 7, 9] 列表对象里面的方法和变量并不清楚,但是封装后只提供一个名称,我们只需要方法的名字,调用名字就可以

--继承

#类Mylist继承list 的方法和属性

>>> class Mylist(list):
pass >>> list2 = Mylist()
>>> list2.append(3)
>>> list2.append(5)
>>> list2.append(7)
>>> list2
[3, 5, 7]
>>> ---list2继承了Mylist的list对象

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

>>> class A:
def fun(self):
print('我是小A。') >>> class B:
def fun(self):
print('我是小B。') >>> a = A()
>>> b = B()
>>> a.fun()
我是小A。
>>> b.fun()
我是小B。
>>> a,b两个不同对象对fun()对象采用的不同的行为

4、对象中的属性和方法,在编程中实际是什么?

变量(属性),函数(方法)

5、类和对象是什么关系呢?

类和对象的关系就如同是模具和用这个模具制作出的物品之间的关系。一个类为它的全部对象给出一个统一的定义,而他的每个对象则是符合这种定义的一个实体,因此类和对象的关系就是抽象和具体的关系

6、类的定义有时候或许不那么“拟物”,有时候会抽象一些,例如我们定义一个矩形,那你会为此添加那些属性和方法呢?

属性如:长宽高,方法如:计算周长,面积

7、面向对象的几个特征:

封装:对外部隐藏对象的工作细节

继承:子类自动共享父类之间的数据和方法的机制

多态:可以对不同类的对象调用相同的方法,产生不同的结果

练习题:

1、按照以下提示尝试定义一个Person类并生成类实例对象

属性:姓名(默认姓名为“小甲鱼”)

方法:打印姓名

提示:方法中对属性的引用形式需加上self,如 self.name

class Person:
name = '尘封' def print_name(self):
print(self.name) >>> p = Person()
>>> p.print_name()
尘封
>>>

2、按照以下提示尝试定义一个矩形并生成类实例对象

属性:长和宽

方法:设置长和 ->setRect(self),获得长和宽 ->getRect(self),获取面积 ->getArea(self)

提示:方法中对属性的引用形式需加上self,如:self.width

class Rectanle:
length = 5
width = 4 def setRect(self):
print('请输入矩形的长和宽...')
self.length = float(input('长:'))
self.width = float(input('宽:')) def getRect(self):
print('这个矩形的长是:%.2f,宽是:%.2f'% (self.length,self.width)) def getArea(self):
return self.length * self.width r = Rectanle()
r.getRect()
r.setRect()
r.getRect()
r.getArea()