首页 > 分享 > python之面向对象

python之面向对象

面向对象有3大特征:封装,继承,多态

封装即私有化,将类属性设置为私有,访问范围仅限类中,外界访问和修改通过get和set方法,并且修改属性需要遵循一定的规则

class People:

def __init__(self, name, age):

self.name = name

self.__age = age

def get_age(self):

return self.__age

def set_age(self, age):

if (age > 0 and age < 100):

self.__age = age

else:

print('年龄不正确')

p = People('lily', 18)

print(p.get_age())

p.set_age(88)

print(p.get_age())

p.set_age(102)

print(p.get_age())

'

运行结果:

18

88

年龄不正确

88

 还有一种更简单的方法,使用@property装饰器,将私有变量像没有私有一样使用

class People:

def __init__(self, name, age):

self.name = name

self.__age = age

@property

def age(self):

return self.__age

@age.setter

def age(self,age):

if (age > 0 and age < 100):

self.__age=age

else:

print('年龄不正确')

def study(self):

print('{},年龄{},正在学习'.format(self.name,self.__age))

p = People('lily', 18)

print(p.age)

p.age=88

print(p.age)

p.age=102

print(p.age)

'

运行结果:

18

88

年龄不正确

88

继承,分为两种,has a和is a,现在继承一般指的是is a

import random

class Road:

def __init__(self, name, len):

self.name = name

self.len = len

class Car:

def __init__(self, brand, speed):

self.brand = brand

self.speed = speed

def get_time(self, rode):

ran_time = random.randint(1, 10)

print('{}品牌的车在{}上以每小时{}公里的速度跑了{}小时'.format(self.brand, rode, self.speed, ran_time))

c = Car('福特', 30)

r = Road('深南大道', 50000)

c.get_time(r.name)

'

运行结果:

福特品牌的车在深南大道上以每小时30公里的速度跑了5小时

'''

特点:

1.如果类中不定义init,系统直接调用父类的init

2.如果类定义了自己的init,需要在当前类的init中调用父类。方法:super().__init__(参数),super(类名,self).__init__(参数)

3.如果父类和子类有同名的方法,默认首先搜索子类

使用场景:父类提供的方法不能满足子类的需求,就需要在子类中定义一个同名的方法,即重写方法

'''

class Pet():

def __init__(self, nickname):

print('----父类init-----')

self.nickname = nickname

def eat(self):

print('宠物喜欢吃')

class Cat(Pet):

def catch(self):

print('{}喜欢抓老鼠'.format(self.nickname))

class Dog(Pet):

def __init__(self, nickname,color):

super(Dog, self).__init__(nickname)

print('-----子类init-----')

self.color = color

def watch_door(self):

print('{}擅长看门'.format(self.nickname))

class Bird(Pet):

def __init__(self, nickname, color):

super().__init__(nickname)

self.color = color

def eat(self, food):

print('{}喜欢吃{}'.format(self.nickname, food))

cat = Cat('花花')

cat.catch()

dog = Dog('大黄', 'yellow')

dog.watch_door()

bird = Bird('麻雀', 'black')

bird.eat('虫子')

'

运行结果:

----父类init-----

花花喜欢抓老鼠

----父类init-----

-----子类init-----

大黄擅长看门

----父类init-----

麻雀喜欢吃虫子

多态,python没有严格意义上的多态,需要借助isinstance来实现多态

'''

python没有严格意义上的多态,严格意义上的多态是设置一个pet类型就只能传pet类型的对象

但是python同时却可以接收其他类型的对象,只能借助isinstance来实现多态

'''

class People():

def __init__(self,name):

self.name=name

def feed(self,pet):

if isinstance(pet,Pet):

print('{}喜欢养宠物:{}'.format(self.name,pet.nickname))

else:

print('太危险了!')

class Pet():

def __init__(self,nickname):

self.nickname=nickname

class Cat(Pet):

role='猫'

def catch(self):

print('{}喜欢抓老鼠'.format(self.nickname))

class Tiger():

def eat(self):

print('老虎不是宠物')

cat=Cat('花花')

tiger=Tiger()

people=People('小丸子')

people.feed(cat)

people.feed(tiger)

'

 运行结果:

小丸子喜欢养宠物:花花

太危险了!

相关知识

Python面向对象高级编程——多重继承
使用面向对象思想设计电子宠物系统
初识面向对象(猫咪项目)
Python实现宠物医院基础功能
Python笔试题
js面向对象第二天
案例驱动式Python学习笔记【第六篇】电子宠物
Python入门笔记—第十章【面向对象之OOP(第四部分,MiXin)】
计算机毕业设计django基于python的宠物分享网站
Python基于大数据技术的宠物商品信息比价及推荐系统

网址: python之面向对象 https://m.mcbbbk.com/newsview201810.html

所属分类:萌宠日常
上一篇: 【中国科学报】AI加持动物行为识
下一篇: 来一组比较小众呆萌又...