python复习36~38类和对象(面向对象的编程)

类和对象:
类和对象是面向对象编程的核心

定义类:

class type:

或者

class type(object)

定义对象:

class Animal:#定义类
	def move(self):
		print('动物在奔跑')
p=Animal()#创建对象
p.move()#调用对象
p.name='狮子'#赋予对象属性
print(p.name)
输出
动物在奔跑
狮子

封装:

>>> list1=[2,5,6,9,0]
>>> list1.sort()
>>> list1
[0, 2, 5, 6, 9]
>>> list1.append(8)
>>> list1
[0, 2, 5, 6, 9, 8]

关于python的魔方方法:

#__init__(每边两个下划线)
class Name:
    def __init__(self,name):
        self.name=name
    def answer(self):
        print('我叫%s'%self.name)

a=Name('carrot')
a.answer()
输出
我叫carrot

普通定义

>>> class Name:
	def setName(self,name):
		self.name=name
	def answer(self):
		print('我叫%s'%self.name)

		
>>> a=Name()
>>> a.setName('carrot')
>>> a.answer()
我叫carrot

继承:
单类继承

>>> class list1(list):
	pass

>>> list2=list1()
>>> list2.append(8)
>>> list2.insert(0,9)
>>> list2
[9, 8]

多类继承

class people:
    def __init__(self,name,age):
        self.name=name
        self.age=age
    def ages(self):
        print('{}今年{}岁'.format(self.name,self.age))

		
class Love:
    def __init__(self,name,age):
        self.name=name
        self.age=age
    def love(self,loves):#注意这里,如果不加self的话,会报错:take 1 positional argument but 2 were given 
    #因为在类调用类内部函数是,会自动传入self参数,所以传递参数是(self,loves)而若只有一个参数(self)就会报错
        print('爱{}'.format(loves))

		
class Answer(people,Love):
    def __init__(self,name,age):
        self.name=name
        self.age=age

answer=Answer('carrot',20)
answer.ages()
answer.love('吃东西')

输出
carrot今年20岁
爱吃东西

多类继承使用不当会导致重复调用(也叫钻石继承、菱形继承)的问题:

class A():
    def __init__(self):
        print("进入A...")
        print("离开A...")

class B(A):
    def __init__(self):
        print("进入B...")
        A.__init__(self)
        print("离开B...")

class C(A):
    def __init__(self):
        print("进入C...")
        A.__init__(self)
        print("离开C...")

class D(B, C):
    def __init__(self):
        print("进入D...")
        B.__init__(self)
        C.__init__(self)
        print("离开D...")

d = D()
输出
进入D...
进入B...
进入A...
离开A...
离开B...
进入C...
进入A...
离开A...
离开C...
离开D...

这里A就被前后进入了两次
多态:

class A:
    def f(self):
        print('输出A')

class B:
    def f(self):
        print('输出B')

a=A()
b=B()
a.f()
b.f()
输出
输出A
输出B

如果不希望对象的属性或方法被外部直接引用,可以在属性或方法名字前边加上双下划线

>>> class a:
	__name = 'carrot'
	def get(self):
		return self.__name

	
>>> p=a()
>>> p.__name
Traceback (most recent call last):
  File "<pyshell#78>", line 1, in <module>
    p.__name
AttributeError: 'a' object has no attribute '__name'
>>> p.get()
'carrot'
>>> class a:
	name = 'carrot'
	def get(self):
		return self.name

	
>>> p=a()
>>> p.name
'carrot'

编程题1:定义一个矩形类并生成类实例对象,要求可以求矩形面积

class Rectangle:
    def setRect(self):
        self.width=float(input('长设置为:'))
        self.length=float(input('宽设置为:'))
    def getRect(self):
        print('这个矩形的长为:%.2f,宽为:%.2f'%(self.width,self.length))
    def getArea(self):
        a=self.width*self.length
        print('面积为:%.2f'%a)

s=Rectangle()
s.setRect()
s.getRect()
s.getArea()
输出
长设置为:5
宽设置为:2
这个矩形的长为:5.00,宽为:2.00
面积为:10.00

编程题2:定义一个点(Point)类和直线(Line)类,使用getlen方法获得直线的长度

import math#调用math模块
class Point():
    def __init__(self,x,y):
        self.x=x
        self.y=y
    def getX(self):
        return self.x
    def getY(self):
        return self.y

class Line():
    def __init__(self,x,y):
        self.x= p1.getX()-p2.getX()
        self.y= p1.getY()-p2.getY()
        self.length=math.sqrt(self.x*self.x+self.y*self.y)#调用math模块的sqr函数

    def getline(self):
        return self.length

p1=Point(1,4)
p2=Point(2,6)
line=Line(p1,p2)
print('%.2f'%line.getline())
输出
2.24
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值