• 小甲鱼Python第039讲:类和对象:拾遗 | 课后测试题及参考答案


    测试题

    0.什么是组合(组成)?

      Python继承机制很有用,但容易把容易代码复杂化以及依赖隐含继承。因此,经常的时候,我们可以使用组合代替。在Python里组合其实很简单,直接在类定义中把需要的类放进去实例化就可以了。

    eg:

     1 # 乌龟类
     2 class Turtle:
     3     def __init__(self,x):
     4         self.num = x
     5 # 鱼类
     6 class Fish:
     7     def __init__(self,x):
     8         self.num = x
     9 # 水池类
    10 class Pool:
    11     def __init__(self,x,y):
    12         self.turtle = Turtle(x)#组合乌龟类进来
    13         self.fish = Fish(y)#组合鱼类进来
    14 
    15     def print_num(self):
    16         print("水池中总共有乌龟%d只,小鱼%d条。" % (self.turtle.num,self.fish.num))
    17 
    18 >>>pool  = Pool(4,5)
    19 >>>pool.print_num()

    1.什么时候用组合,什么时候用继承?

      根据实际应用场景确定。简单的说,组合用于“有一个”的场景中,继承用于“是一个”的场景中。例如,水池里面有一个乌龟,天上有一只小甲鱼,这些适合使用组合。青瓜是瓜,女人是人,鲨鱼是鱼,这些就应该使用继承啦。

    2.类对象实在什么时候产生?

      当你这个类定义完的时候,类定义就变成了类对象,可以直接通过“类名.属性”或者“类名.方法名()”引用或使用相关的属性或方法。

    3.如果对象的属性跟方法名字相同,会怎样?

      如果对象的属性和方法名相同,属性就会覆盖方法。

     1 >>> class C:
     2     def x(self):
     3         print("X-man")
     4 
     5         
     6 >>> c = C()
     7 >>> c.x()
     8 X-man
     9 >>> c.x = 1
    10 >>> c.x
    11 1
    12 >>> c.x()
    13 Traceback (most recent call last):
    14 
    15   File "<pyshell#50>", line 1, in <module>
    16     c.x()
    17 TypeError: 'int' object is not callable

    4.请问有效类定义中哪些是类属性,哪些是实例属性?

    1 class C:
    2     num = 0
    3     def __init__(self):
    4         self.x =4
    5         self.y = 5
    6         C.count = 6

      num和count是类属性(静态变量),x和y是实例属性。大多数情况下,应该考虑使用实例属性,而不是类属性(类属性通常仅用来跟踪与类相关的值)

    5.请问以下代码中,bb对象为什么调用printBB()方法失败?

    1 >>> class B:
    2     def printB():
    3         print("no zuo no die")        
    4 >>> b = B()
    5 >>> b.printB()
    6 Traceback (most recent call last):
    7   File "<pyshell#54>", line 1, in <module>
    8     b.printB()
    9 TypeError: printB() takes 0 positional arguments but 1 was given

      因为Python严格要求方法需要有实例才能调用,这种限制其实就是Python所谓的绑定概念。所以Python会自动把bb对象作为第一个参数传入,所以才会出现TypeError:"需要0个参数,但实际传入了1个参数"。

    1 >>> class B:
    2     def printB(self):
    3         print("no zuo no die")
    4 
    5         
    6 >>> b = B()
    7 >>> b.printB()
    8 no zuo no die

    动动手:

    0.思考这一讲我学习的内容,请动手在一个类中定义一个变量,用于跟踪该类有多少个实例被创建(当实例化一个对象,这个变量+1,当销毁一个对象,这个变量自动-1)

     1 >>> class D:
     2     count = 0 
     3     def __init__(self):
     4         D.count += 1
     5 
     6     def __del__(self):
     7         D.count -= 1
     8 
     9         
    10 >>> a = D()
    11 >>> b = D()
    12 >>> D.count
    13 2
    14 >>> c = D()
    15 >>> d = D()
    16 >>> D.count
    17 4
    18 >>> del c
    19 >>> D.count
    20 3

     1 class Stack:
     2     def __init__(self,start=[]):
     3         self.stack = []
     4         for each in start:
     5             self.push(each)
     6     def isEmpty(self):
     7         return not self.stack
     8     def push(self,value):
     9         self.stack.append(value)
    10     def top(self):
    11         if not self.stack:
    12             print("栈为空")
    13         else:
    14             return self.stack[-1]
    15     def bottom(self):
    16         if not self.stack:
    17             print("警告:栈为空。")
    18         self.base = self.stack[0]
    19     def pop(self):
    20         if not self.stack:
    21             print("栈为空")
    22         else:
    23             return self.stack.pop()
  • 相关阅读:
    值不丢失,虽然仅在局部函数中存在
    js 中和c类似
    天天QA
    request methods Hypertext Transfer Protocol (HTTP/1.1)
    单元测试
    access variables from the global scope 在全局范围内访问变量的2种方法
    summary
    安全跟效率之间的折中而已 记住一个大原则,安全和效率是对立的
    微信商城 Common Log Format Apache CustomLog
    僵尸进程 zombie
  • 原文地址:https://www.cnblogs.com/IT-NXXB/p/13509147.html
Copyright © 2020-2023  润新知