day16总结

*1.new及init
本质上,类可以调用所有声明在类中的方法,用类来调用eat()方法的时候,传参是传给self,而self是不用传参的,这是python语法太灵活导致。
@classmethod
修饰器,类的方法需要使用类来调用,即不需要对象属性,就选择类方法,这样可以使用类的字段。
@staticmethod
没有自带参数,方法的实现不需要对象,同时也不需要类的字段

class Person:
    number=10
    def __new__(cls, *args, **kwargs):
        print('创建对象')
        #new是暗含的, 在对象还未创建出来,可以做其他事情。
    def __init__(self,a,b):
        self.name='张三'
        print('初始化对象',a,b)
    def eat(self):
        print('%s:abc'%self.name)
p1=Person(10,20)

2.多继承
python中的类支持多继承,继承的时候子类拥有父类所有的属性和类的字段,但是不建议使用
多个父类,但是对象属性则只能够是继承第一个父类的对象属性

class Animals(object):
    def __init__(self,name='小动物',age=0):
        self.name=name
        self.age=age
    def eat(self):
        print('%s在吃东西'%self.name)

class Fly:
    def __init__(self,heigth=0):
        self.max_hight=heigth

    def fly(self):
        # print('最高可以飞:%s'%self.max_hight)
        print('飞起来')

# class Brid(Animals,Fly):
    #brid同时拥有Ainmals和Fly类
    # pass
# brid1=Brid()

# print(brid1.name,brid1.age,brid1.max_hight)
# AttributeError: 'Brid' object has no attribute 'max_hight'

# brid1.fly()
# AttributeError: 'Brid' object has no attribute 'max_hight'

# brid1.fly()
# 飞起来

# brid1.eat()
# 小动物在吃东西
class A:
    # 属性
    # 方法
    pass
class B:
    # 属性
    # 方法
    pass
class C(A,B):
    # 多继承
    # 继承属性是通过继承的是init方法来继承的,对象的属性,只能是单独继承其中的第一个
    # 语法上是支持的,但是我们一般是不使用的
    pass
    #子类可以继承父类所有的属性和方法
    #但是只能继承第一个父类的属性

3.多态
多态就是多种形态,有继承就多态,不同类继承同一类,其实就是对这个共同类有不同的形态,集成后对方法的重写就是多态

class Brid(Animals,Fly):
    #brid同时拥有Ainmals和Fly类
    def eat(self):
        print('%s')
brid1=Brid()

3.多态
1.不同的类继承至同一类,其实就是对共同的父类的不同的形态
2.更具体的就是,方法的重写,继承之后可以让同一方法有不同的实现

4.类的特点:
1.封装(一个类中可以有多个方法,一个类中可以有多个属性,即数据的封装)
2.继承(通过继承,让子类来拥有父类的属性和方法)
3.多态(继承属性和方法的重写)

import Person
from  Time import Date

Person.name='李四'
Person.eat()

4.包
将多个模块封装在一起,就是包,包就是有一个默认文件init.py的文件夹
本质就是文件夹

1.import 包.模块
import download.saveDate
download.saveDate.save_date_json('abc')

# 2.from 包 import 模块
from download import downloadDate
downloadDate.http_download('一人之下')

# 3.from 包.模块 import 方法/变量/类
from download.saveDate import insert_db
insert_db('账号')

5.raise 错误类型
抛出异常,可以让程序主动崩溃,用在检测和调试的时候用的
raise 关键字
错误类型:必须是一个类,并且这个类必须是Exception的子类
要么是已经拥有的错误类型,要么就是自己写出一个来
写一个属于自己的错误类型str(self)

class YTEerror(Exception):
    # def __init__(self,name='错误类型1'):
    #     self.name=name
    name=''
    def __str__(self):
        # str的本质,就是定义类和对象的打印内容,内置内属性时讲的
        return '余氏错误 %s'% YTEerror.name
num=10
if num%2:
    YTEerror.name='奇数错误!'
else:
    YTEerror.name='偶数错误!'

raise YTEerror

你可能感兴趣的:(day16总结)