python-面向对象进阶
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python-面向对象进阶相关的知识,希望对你有一定的参考价值。
小总结:
面向对象的好处
更容易扩展,提高代码的使用效率,使代码组织性更强、更清晰,更适合复杂项目的开发
封装:把功能的实现细节封装起来,之暴露调用接口
多态:接口的继承
定义:
类 : 模板
对象 : 实例化的类
属性:私有属性 __private
公有属性 存在类中的变量
成员属性 实例变量
方法 :函数
构造函数:
析构函数:实例被销毁(手动删除变量或者程序结束),调用析构函数
新式类VS经典类:
新式类:继承路径:广度优先
经典类:继承路径:深度优先
一、抽象接口:
1 class Alert(object): 2 ‘‘‘报警类‘‘‘ 3 def send(self): 4 raise NotImplementedError 5 class MailAlert(Alert): 6 def send(self,msg): 7 print(‘_____sending:‘,msg) 8 class SMSAlert: 9 pass 10 m=MailAlert() 11 m.send(‘ooooooooooooooooo‘)
二、类方法:
类方法只能访问类的公有属性,不能访问成员属性和私有属性
1 class Person(object): 2 id=‘11111111111111111‘ 3 def __init__(self,name): 4 self.name=name 5 @staticmethod 6 def eat(name): 7 print(‘%s is eating...‘%name) 8 @classmethod 9 def h(self): 10 print(‘%s‘%(self.id)) 11 #不需要实例化直接通过类调用 12 Person.eat(‘eeeeeeeeeee‘) 13 p=Person(‘song‘) #类方法只能调用公有属性,不嗯给你调用成员属性和私有属性 14 p.h()
静态方法既不能访问公有属性也不能访问实例属性
三、属性方法
把一个方法变成一个变量
1 class Person(object): 2 id=‘11111111111111111‘ 3 def __init__(self,name): 4 self.name=name 5 @property 6 def talk(self): 7 print(‘%s say‘%self.name) 8 p=Person(‘songxiaonan‘) 9 # p.talk() #报错 10 p.talk # songxiaonan say
给属性方法变成变量后,给这个变量附一个值 @talk.setter
1 class Person(object): 2 id=‘11111111111111111‘ 3 def __init__(self,name): 4 self.name=name 5 @property 6 def talk(self): 7 print(‘%s say‘%self.name) 8 @talk.setter 9 def talk(self,msg): 10 print(‘talk %s‘%msg) 11 p=Person(‘songxiaonan‘) 12 # p.talk() #报错 13 p.talk # songxiaonan say p.talk调用的是第一个talk 14 p.talk=‘ahahhahhahahaha‘ #talk ahahhahhahahaha p.talk=值 就是调用的第二个talk
删除变量 @talk.deleter
1 class Person(object): 2 id=‘11111111111111111‘ 3 def __init__(self,name): 4 self.name=name 5 @property 6 def talk(self): 7 print(‘%s say‘%self.name) 8 @talk.setter 9 def talk(self,msg): 10 print(‘talk %s‘%msg) 11 @talk.deleter 12 def talk(self,msg): 13 print(‘delete.....‘)
del p.talk
四、类的其他特殊方法
1 class Animal(object): 2 country=‘BeiJing‘ 3 def __init__(self,name,age): 4 self.name=name 5 self.age=age 6 def __str__(self): # 定制实例的返回结果 7 return ‘%s——%s‘%(self.name,self.age) 8 9 A = Animal(‘CAT‘, ‘12‘) 10 print(A.__dict__) # 打印实例的属性 {‘name‘: ‘CAT‘, ‘age‘: ‘12‘} 11 print(A.__module__) # 打印实例所在的模块 __main__ 12 print(A.__class__) # 打印实例所在的类 <class ‘__main__.Animal‘> 13 print(A) # CAT——12
以上是关于python-面向对象进阶的主要内容,如果未能解决你的问题,请参考以下文章