python DAY_7(2)面向对象编程实例

学习内容:
面向对象编程,继承与多态
Tips:多态的核心思想是同一类型的不同实例,同一消息的不同响应
重点:
1.子类继承父类
我们在定义完父类之后,在创建子类时可以直接引用父类
定义及引用格式如下:
class 子类名(父类名):
def ——init———(self,父类关键字(多个),子类关键字(多个)):
#这个时候声明变量的时候无需在一个一个定义,调用父类即可
父类名.init(self,父类关键字(多个))
或者(super().init(父类关键字(多个)))
#以上两种定义都可以实现继承
self.子类关键字(多个)=子类关键字
def repr(self):#防止打印消息无内容,或者显示无用内同
return “*{}”.format(self.子类关键字)#仅提供一种形式,具体内容自己设定。
在上述定义好之后我们便可以进行对子类的操作,包括定义函数,引用等等。
以下我将直接进入代码段,回顾一下学习内容。
(还是以之前健身为例子)
1.首先我们创建父类名为Fitness。
具体代码如下:
class Fitness: # 创建了健身这个类

def __init__(self,
             name=" ",
             sex=" ",
             birthday=" ",
             aim="减脂",
             weight=" ",
             heart_rate=" ",
             blood_pressure=" ",
             recommend_sport=None):
    # 初始化,我们需要将基本消息和条件写入,即使没有测得数字,我们可是默认附上内容,在后续我们录入数值时,可以自动替换掉
    self.name = name
    self.sex = sex
    self.birthday = birthday
    self.aim = aim
    self.weight = weight
    self.heart_rate = heart_rate
    self.blood_pressure = blood_pressure
    self.recommend_sport = recommend_sport
    Fitness.count += 1

def __repr__(self):
    return "姓名:{}".format(self.name)

#开始
@property
def age(self):
return datetime.date.today().year - self.birthday.year

@age.setter  # 无需冒号
def age(self, value):  # age为属性,可以随时调用了

    raise AttributeError("禁止更改年龄")

@age.deleter
def age(self):
    raise AttributeError("禁止删除年龄")

#结束,具体应用参考上一篇博客
def print_out(self): # 定义输出函数
print(" 名字:{}".format(self.name))
print(" 性别:{}".format(self.sex))
print(" 出生日期:{}".format(self.birthday))
print(“体重:{}”.format(self.weight))
print(" 心率:{}".format(self.heart_rate))
print(“血压: {}”.format(self.blood_pressure))
print(" 推荐动作:{}".format(self.recommend_sport)) # 完成了输出~

上述父类因为引用了年龄,年龄是可变的所以在操作时要导入datetime包
import datetime
2.父类创建好之后,我们便可以声明了
man1 = Fitness(“zzh”, “man”, datetime.date(1998, 1, 10), “增肌”, “55”, “85”, “120-70”)
man2 = Fitness(“wxj”, “man”, datetime.date(1997, 1, 10), “增肌”, “55”, “85”, “120-70”)
man3 = Fitness(“lonely”, “man”, datetime.date(1996, 1, 10), “增肌”, “55”, “85”, “120-70”)
man1.print_out()
上述在创建好之后实现父类里面的函数调用,即print_out()的调用
3.子类的创建,定义声明
因为涉及到继承,是本次的重点
****创建子类,代码如下
**class Coach(Fitness):
def init(self, name, sex, birthday, aim, weight, heart_rate, blood_pressure, recommend_sport, speciality,
salary):
Fitness.init(self, name, sex, birthday, aim, weight, heart_rate, blood_pressure, recommend_sport)
#还可以使用如下:
#super().init(name,sex,birthday,aim,weight,heart_rate,blood_pressure,
recommend_sport)一样可以使用
self.speciality = speciality
self.salary = salary
def repr(self):
return “此教练擅长:{}\n所带会员名字:{}”.format(self.speciality, self.name)
def addsalary(self, bounspercentage, addpercentage):
return self.salary * (1 + bounspercentage + addpercentage)
@property
def age(self):
return datetime.date.today().year - self.birthday.year

我们在创建好子类之后,便可以对子类进行创建内容和使用了
coach1 = Coach(“zzh”, “man”, datetime.date(1998, 1, 10),“增肌”, “55”, “85”, “120-70”, “squat”, “抗阻力训练”, 8000)
创建之后,我们可以打印coach1
print(coach1)
#此时会调用到repr函数(位于子类中,打印repr的内容)
print(“此教练工资:{}”.format(coach1.addsalary(0.1, 0.2)))#调用addsalary函数
print(“会员的生日:{}”.format(coach1.age))#age使用到装饰器,age成为一个单独的属性,便可以调用
print(coach1.birthday)#打印生日信息,具体格式参见代码******

发布了33 篇原创文章 · 获赞 0 · 访问量 703

猜你喜欢

转载自blog.csdn.net/soulproficiency/article/details/103929141
今日推荐