第一次作业
#思考题一:什么是类的继承?
#思考题二:什么是super函数,__mro__ 属性又是什么?
#作业题:1.实现一个简单的单继承, 2.实现一个简单的钻石继承
答案:
1.继承指的是类与类之间的关系,是一种什么“是”什么的关系。多个类之间存在什么是什么的关系 就可以使用继承。继承本身没有特殊之处,就是一种创建新类的方法,新建的类可以继承一个或多个父类。
2.super()函数是用于调用父类的一个方法,是用来解决多继承问题的,直接调用父类方法在使用单继承的时候没问题,多技能会涉及到顺序和重复调用等问题
语法:super(type[, object-or-type]);
super是依赖继承,只要有一个子类它继承了一堆父类python会给我们计算出一个mro列表 super就是在mro列表里面帮我们找属性,所以它是依赖继承的。
- 单继承
class A():
def funA(self):
print('A')
class B(A):
def funB(self):
print('B')
b=B()
b.funA()
#A
- 钻石继承
class A():
def func(self):
print('A')
class B(A):
def func(self):
print('B')
class C(A):
def func(self):
print('C')
class D(B,C):
def func(self):
print('D')
d=D()
d.func()
print(D.mro())
#D
#[<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>]
第二次作业
#思考题一:如何对父类的方法进行重写?
#思考题二:什么是类的封装?其具体含义是什么?
#作业题一: 编写一个类,对下面的类进行继承,并且修改父类A中color方法,打印结果为 “这是重写之后的方法”
class A():
def __init__(self):
print('基类的构造方法')
def color(self):
print("这是主类方法")
答案:
在子类里面对父类的方法名字一样,内容重新编辑即可
封装就是隐藏对象的属性和实现的细节,仅仅对外提供访问公式,封装=隐藏
将不需要对外提供的功能隐藏起来,隐藏其属性,提供公共方法对其方法
class A():
def __init__(self):
print('基类的构造方法')
def color(self):
print("这是主类方法")
class B():
def color(self):
print("这是重写的方法")
kk=B()
kk.color()
第三次作业
#思考题一:什么是类的私有属性?私有属性在类中如何被定义?
#思考题二:如何在类外访问类的私有属性?有哪几种方法?为什么不建议这么做?
#作业题三:尝试写一个在类外调用私有属性的例子。
类的私有属性就是,对象的某些属性或方法,只希望在对象的内部使用,而不是在外部被访问
定义方法就是**__属性名(两个下划线)**
- get,set方法
- property 方法
- 通过装饰器
为了更好的保证属性的安全,也因为不同版本的python解释器会把属性改成不同的变量名
class A:
def __init__(self,age):
self.__age = age
def get_age(self):
return "年龄是 = " + self.__age
a1 = A("19")
print(a1.get_age())
class A:
def __init__(self,age):
self.__age = age
def get_age(self):
return "年龄是 = " + self.__age
age = property(get_age)
a1 = A("19")
print(a1.age)
第四次作业
#思考题一:什么是类的多态?
#思考题二:什么是类中的魔术方法?列举5个常用的魔术方法并解释其作用?(建议手动尝试下)
多态指的是一类事物有多种形态,例如动物有很多种:猪,狗,猫之类的
所有以__双下划线包起来的方法,都称为魔术方法
# -*- coding: utf-8 -*-
# __init__ 用于创建实例属性
class A():
def __init__(self):
print('初始化方法')
C1=A()
#__del__() 的调用是由解释器在进行垃圾回收时自动触发执行的。
class B():
def __del__(self):
print("你别过来,我怕猪......")
c2 = B()
# __len__() 计算对象的长度
class C:
def __init__(self, name, age):
self.name = name
self.age = age
def __len__(self):
return len(self.__dict__)
c3 = C("小阿卷", 18)
print(len(c3))
#__file__ 打开当前文件所在的路径
class D:
def __init__(self, name, age):
self.name = name
self.age = age
print(__file__)
# __dict__ 查看类的__dict__属性和类对象的__dict__属性 包括私有属性也能打印出来
class E:
name = "小明"
__age = 18
def tes(self):
pass
print(E.__dict__)
第五次作业
#作业题:设计一个计算BMI的类
#BMI:国际上常用的衡量人体肥胖和健康程度的重要标准,主要用于统计分析
#-定义:BMI=体重(kg)/身高*身高(m*m)
class A:
def __init__(self,weight,height):
self.weight = weight
self.height = height
def BMI(self):
return self.weight/self.height**2
k=A(62,1.78)
print(k.BMI())