【python基础知识】

【python基础知识】

一、补充知识

在继承的过程中
在这里插入图片描述

继承的方式有两种: 1.普通继承

​ 2.组合

组合的示意图
在这里插入图片描述

要同时继承两个类里面的方式时,将简单的进行实例化,这样才能完成组合继承的方式。

二、静态方法

通过@staticmethod装饰器即可把其装饰的方法变为一个静态方法。

什么是静态方法呢?

​ 其实不难理解,普通的方法,可以在实例化后直接调用,并且在方法里可以通过self.调用实例变量或类变量,但静态方法是不可以访问实例变量或类变量的,一个不能访问实例变量和类变量的方法,其实相当于跟类本身已经没什么关系了,它与类唯一的关联就是需要通过类名来调用这个方法

*(只是名义上归类管,实际上在静态方法里访问不了类或实例中的任何属性)

三、类方法

​ 只能访问类变量,不能访问实例变量

四、属性方法

​ 把一个方法变成一个静态属性

这种属性方法是不可以直接删除掉的。演示一下属性方法的调用和删除。

import os
# os.system()
# os.mkdir()

class Dog(object):
    '''这个类是描述狗这个对象的'''

    def __init__(self,name):
        self.name = name
        self.__food = None

    #@staticmethod #实际上跟类没什么关系了
    #@classmethod
    @property #attribute
    def eat(self):
        print("%s is eating %s" %(self.name,self.__food))
    @eat.setter--------------------------------------------------------------------------------------------
    def eat(self,food):
        print("set to food:",food)
        self.__food = food
    @eat.deleter--------------------------------------------------------------------------------------------
    def eat(self):
        del self.__food
        print("删完了")

    def talk(self):
        print("%s is talking"% self.name)

    def __call__(self, *args, **kwargs):
        print("running call",args,kwargs)

    def __str__(self):
        return "<obj:%s>" %self.name

#print(Dog.__dict__) #打印类里的所有属性,不包括实例属性
d = Dog("ChenRonghua")
print(d)
# print(d.__dict__) #打印所有实例属性,不包括类属性
# d(1,2,3,name=333)

#Dog("ChenRonghua")()

为了方便观察,用线在上文中标注出来

属性方法的例子

class Flight(object):
    def __init__(self,name):
        self.flight_name = name


    def checking_status(self):
        print("checking flight %s status " % self.flight_name)
        return  0

    @property
    def flight_status(self):
        status = self.checking_status()
        if status == 0 :
            print("flight got canceled...")
        elif status == 1 :
            print("flight is arrived...")
        elif status == 2:
            print("flight has departured already...")
        else:
            print("cannot confirm the flight status...,please check later")
    @flight_status.setter
    def flight_status(self,status):
        print("flight %s has changed status to %s" %(self.flight_name,status))

f = Flight("CA980")
f.flight_status

f.flight_status = 2

五、类的特殊成员方法

  1. doc  表示类的描述信息

    class Dog(object):
        ''''这个类是描述狗这个对象的'''
    print(Dog.__doc__)
    
  2. moduleclass

module 表示当前操作的对象在那个模块

class 表示当前操作的对象的类是什么

  1. init 构造方法,通过类创建对象时,自动触发执行。

  2. del

析构方法,当对象在内存中被释放时,自动触发执行。

注:此方法一般无须定义,因为Python是一门高级语言,程序员在使用时无需关心内存的分配和释放,因为此工作都是交给Python解释器来执行,所以,析构函数的调用是由解释器在进行垃圾回收时自动触发执行的

  1. call 对象后面加括号,触发执行。

注:构造方法的执行是由创建对象触发的,即:对象 = 类名() ;而对于 call 方法的执行是由对象后加括号触发的,即:对象() 或者 类()()

  1. dict 查看类或对象中的所有成员
#上面有定义了一个类
print(Dog.__dict__)#打印类里的所有属性,不包括实例属性
d = Dog("lxp")
print(d..__dict__)#打印所有实例属性,不包括类属性

7.str 如果一个类中定义了__str__方法,那么在打印 对象 时,默认输出该方法的返回值。

8.getitemsetitemdelitem

用于索引操作,如字典。以上分别表示获取、设置、删除数据

六、反射

通过字符串映射或修改程序运行时的状态、属性、方法, 有以下4个方法

  1. hasatter(obj,name_str),判断一个对象obj里是否有对应的name_str字符串的方法。

  2. getattr(obj,name_str),根据字符串去获取obj对象里的对应的方法的内存地址。

  3. setattr(obj,‘y’,z) is equivalent to ''x,y=v"

  4. delattr(x, y) 这里是删除

def bulk(self):
    print("%s is yelling..."%self.name)

class Dog(object):

    def __init__(self,name):
        self.name = name

    def eat(self,food):
        print("%s is eating///"%self.name,food)

d = Dog("Niu")
choice = input(">>:").strip()

if hasattr(d,choice):#判断选择的方法是不是在类中
    func = getattr(d,choice)
    func("chenronghua")
else:
    setattr(d,choice,bulk)
    d.talk(d)

这里把前面三个方法演示了一遍,没一个都是下一个的递进。最后完成一个动态装了一个方法。删除的方法就不掩饰了

七、异常处理

  1. 常用的异常类型!
AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
IOError 输入/输出异常;基本上是无法打开文件
ImportError 无法引入模块或包;基本上是路径问题或名称错误
IndentationError 语法错误(的子类) ;代码没有正确对齐
IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
KeyError 试图访问字典里不存在的键
KeyboardInterrupt Ctrl+C被按下
NameError 使用一个还未被赋予对象的变量
SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
TypeError 传入对象类型与要求的不符合
UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,
导致你以为正在访问它
ValueError 传入一个调用者不期望的值,即使值的类型是正确的

常用异常
  1. 异常处理的常见格式。
try:
    pass
except Exception,ex:
    pass

人认为这是语法错误,写错了)
TypeError 传入对象类型与要求的不符合
UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,
导致你以为正在访问它
ValueError 传入一个调用者不期望的值,即使值的类型是正确的

常用异常


2. 异常处理的常见格式。

~~~python
try:
    pass
except Exception,ex:
    pass

八、Socket网络编程
下个在补充吧

©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页