类和对象

1、基本使用

class MyClass(object): message = 'Hello Developer'def show(self): print(self.message)def main(): print(MyClass.message)MyClass.message = 'Hello mudy'#修改成员变量 print(MyClass.message)inst = MyClass()#实例化一个MyClass的对象 inst.show()if __name__ == '__main__': main()

Hello Developer Hello mudy Hello mudy

  • 类名为MyClass
  • 该类中定义了一个成员变量message,并对其赋了初始值
  • 类中定义了成员函数show(self),注意类中的成员函数必须要带参数self
  • 参数self是对象本身的引用,在成员函数体可以引用self参数获得对象的信息
2、构造函数
?构造函数是一种特殊的类成员方法,主要用来在创建对象时初始化对象,即为对象成员变量赋初始值。Python中的类构造函数用__init__命名,为MyClass添加构造函数方法,并实例化一个对象。
class MyClass(object): message = 'Hello ,Developer'def show(self): print(self.message)def __init__(self):#构造函数在MyClass被实例化时被Python解释器自动调用, print('构造函数被调用')def main(): inst = MyClass() inst.show()if __name__=='__main__': main()

构造函数被调用 Hello ,Developer

  • 默认参数
class MyClass: message = 'Hello Developer'def show(self): print(self.message)def __init__(self,name='mudy',age='18'): print('构造函数被调用了,参数是',name,' ',age)def main(): inst = MyClass() inst.show()inst2 = MyClass('huy') inst2.show()inst3 = MyClass('dabao','17') inst3.show()inst4 = MyClass(age='20') inst4.show() if __name__ == '__main__': main()

构造函数被调用了,参数是 mudy18 Hello Developer 构造函数被调用了,参数是 huy18 Hello Developer 构造函数被调用了,参数是 dabao17 Hello Developer 构造函数被调用了,参数是 mudy20 Hello Developer

【类和对象】?注意:在构造函数中不能有返回值
?在Python中不能定义多个构造函数,但可以通过为命名参数提供默认值的方式达到利用多种方式构造对象的目的。
3、析构函数
?析构函数是构造函数的反向函数,在销毁(释放)对象时将调用它们。析构函数往往用来做“清理善后”的工作,例如数据库链接对象可以在析构函数中释放对数据库资源的占用。Python中为类定义析构函数的方法是在类中定义一个名字为__del__的没有返回值和参数的函数。
?与Java类似,Python解释器的堆中存储着正在运行的应用程序所建立的所有对象,但是他们不需要程序代码来显示地释放,因为Python解释器会自动跟踪他们的引用计数,并自动销毁(同时调用析构函数)已经没有被任何变量引用的对象,在这种场景中,开发者并不知道对象的析构函数何时会被调用,同时Python提供了显示销毁对象的方法:使用del关键字。
class MyClass(object): message = 'Hello Developer'def show(self): print(self.message)def __init__(self,name='mudy',age='18'): print('构造函数被调用,参数是',name,age)def __del__(self): print('析构函数被调用') def main(): inst = MyClass() inst.show()inst2 = MyClass('huy') inst2.show()del inst,inst2inst3 = MyClass('huy','18') inst3.show() del inst3 if __name__ == '__main__': main()

构造函数被调用,参数是 mudy 18 Hello Developer 构造函数被调用,参数是 huy 18 Hello Developer 析构函数被调用 析构函数被调用 构造函数被调用,参数是 huy 18 Hello Developer 析构函数被调用

如果不手动del,则输出结果如下:
构造函数被调用,参数是 mudy 18 Hello Developer 构造函数被调用,参数是 huy 18 Hello Developer 构造函数被调用,参数是 huy 18 Hello Developer 析构函数被调用 析构函数被调用 析构函数被调用

    推荐阅读