python_Daily practice (每日一练) 96

关卡二:

1.练习题1
面向对象的理解
要求:
在类内定义一个可以重新设置私有属性name的函数条件为字符串长度小于10,才可以修改.
答:

def SetName(self, newname):
         if len(newname) < 10:
             self.__name = newname
         else:
             print("error:名字太长!")

在创建一个类之后需要调用什么函数?
答:应调用__del__()函数.

del()方法是手动调用还是类默认调用?
答:手动调用

如何访问对象的属性?
答:使用(.)来访问对象的属性

创建一个动物类,并通过init方法接受参数(name),并打印init被调用.

 class Animal(object):
 # 初始化方法
 # 创建完对象后会自动被调用
 def __init__(self, name):
     print('__init__方法被调用')
     self.__name = name

在动物类中定义一个析构方法,使其在删除的时候自动被调用,并打印del被调用.

 def __del__(self):
     print("__del__方法被自动调用")

实例化一个dog对象取名"八公"
 dog = Animal("八公")

将实例dog赋值给dog1和dog2.
 dog1 = dog
 dog2 = dog

 print(" 删除dog对象")
 del dog
 print(" 删除dog1对象")
 del dog1
 print(" 删除dog2对象")
 del dog2

观察运行结果发现什么问题?
答:只有当第三个对象被删除的时候,dog对象才被正真的删除.

上述结果说明什么问题?
答:

  1. 当有1个变量保存了对象的引用时,此对象的引用计数就会加1
  2. 当使用del删除变量指向的对象时,如果对象的引用计数不会1,比如3,那么此时只会让这个引用计数减1,即变为2,当再次调用del时,变为1,如果再调用1次del,此时会真的把对象进行删除

你可能感兴趣的:(Python_learning)