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-面向对象进阶的主要内容,如果未能解决你的问题,请参考以下文章

python-面向对象进阶

Python基础-week06 面向对象编程进阶

python学习笔记-面向对象进阶&异常处理

python学习笔记-面向对象进阶&异常处理

Python7 - 面向对象编程进阶

Python 进阶指南(编程轻松进阶):十六面向对象编程和继承