python巩固知识第四周

第一次作业

#思考题一:什么是类的继承?


#思考题二:什么是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())

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_水哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值