Python的类,类的继承,类中__init__( ),__str__( ),__del__( ),类中的self

最近看Python,看到了Python中的类,类的继承,对象self,等概念,于是学习了下,下面做一个记录,就从一段代码开始分析起:
下面一段代码里,有一个父类mytime,然后定义了一个子类mydatatime,继承了父类mydata。

import time
class mytime(object):
    def __init__(self, hour=21, minute=13, second=50):
        self.hour = hour
        self.minute = minute
        self.second = second

    def __str__(self):
        return '__str__ hour:minute:second = %02d:%02d:%02d' % (self.hour, self.minute, self.second)

    def get_hour(self):
        return self.hour

    def get_minute(self):
        return self.minute

    def get_second(self):
        return self.second

    def print_time(self):
        print('hour:minute:second = %02d:%02d:%02d' % (self.hour, self.minute, self.second))


class mydatetime(mytime):
    def __init__(self, year=2016, mounth=1, day=1,hour=21, minute=13, second=50):
        super(mydatetime, self).__init__(hour, minute, second)
        self.year = year
        self.mounth = mounth
        self.day = day

    def __str__(self):
        return '__str__ year--mounth--day = %02d--%02d--%02d' \
               % (self.year, self.mounth, self.day)

    def __del__(self):
        """ __del__ mydatetime destroyed """
        print("__del__ mydatetime destroyed")

    def print_date(self):
        print ('year-mounth-day = %04d-%02d-%02d'  % (self.year, self.mounth, self.day))
        #        self.print_time()
  1. self

细看代码,肯定会注意到一个变量self,这个self在init()构造函数中是必须存在的, 有点像C++中的this,是一个默认的对象(和类的实例是一个意思),但Python中必须写出,C++中一般不写出。
下面是self的3条总结:
1.self在定义时需要定义,但是在调用时会自动传入。
2. self的名字并不是规定死的,但是最好还是按照约定是用self
3.self总是指调用时的类的实例。-我的理解是在哪个类中的self,就是指的是哪个类的实例,比如上面代码中,父类mytime中的self,就是父类的一个对象实例,可以有父类的属性-(hour, minute, second),在子类mydatatime中的self就是子类的对象实例,包含子类的属性-( year, mounth, day,hour, minute, second)。

2.init(self, …),str(self,…),del(self,..)

2.1__init__()函数:可以当做C++ 中的构造函数来理解,只是多了self,在初始化对象的时候,会自动调用init()函数。

2.2 del_()函数:可以当做C++ 的析构函数来理解,在python中,对于开发者来说很少会直接销毁对象(如果需要,应该使用del关键字销毁)。Python的内存管理机制能够很好的胜任这份工作。也就是说,不管是手动调用del还是由python自动回收都会触发del方法执行

2.3.str():str是被print函数调用的,一般都是return一个什么东西。就是我们实例化了一个对象a,用print(a),就会输出str()函数return的字符串。
我们编写一个新的Python类的时候,总是在最开始位置写一个初始化方法init,以便初始化对象,然后会写一个str方法,方面我们调试程序。

3.super()
这个函数是在子类中,调用父类的一个函数,可以解决多继承问题。

下面一段代码调用了上面的父类和子类

if __name__ == '__main__':
    print ("\n")
    print ("--" * 10, " mytime t0:")
    t0 = mytime()
    print (t0)
    t0.print_time()
    print (t0.get_hour())
    #
    print("\n")
    print("--" * 10, " mytime t1:")
    t1 = mytime(hour=7, second=20)
    t1.print_time()
    # #
    print("\n")
    print ("--" * 10, " mydatetime da:")
    da = mydatetime(minute=40)

    time.sleep(5)#系统暂停5秒
    # print(da)
    # da.print_date()
    # da.print_time()
    # del da

一句一句运行上面代码,就会加深理解。

猜你喜欢

转载自blog.csdn.net/CV_YOU/article/details/79600058