*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