7-15作业
1、什么是类和对象
类就是拥有相同功能或者相同属性对象的集合,对象就是类的实例
2、定义类(创建类)
-
概念:
用代码来描述这个类是也有哪些相同功能和哪些相同属性的对象的集合,功能使用函数来描述;属性使用变量来描述。
-
语法:
'''
class 类名:
类的说明文档
类的内容(包含方法和属性)
'''
- 说明:
'''
class -关键字;固定写法
类名 -自己命名,与命名规则一样;大驼峰命名(UserName)
: -固定写法
说明文档 -多行注释
内容 -方法:定义在类中的函数,包括对象方法、类方法、静态方法
属性:定义在类中的变量,包括对象属性、类属性
'''
3、创建对象
3.1 语法
'''
类名() 创建指定类的对象
'''
4、方法
4.1 对象方法
- 定义:直接定义在类中的函数
- 调用:通过’对象.xxx()’的方式来调用
- 特点:有个默认参数self,在通过对象调用对象方法的时候参数self不需要传参,系统会自动将当前对象传给self(谁调用self指向谁)
class A:
#func1是对象方法
def funn1(self):
print('对象方法')
a1 = A()
a1.func1()
4.2 类方法
- 定义:定义函数面前加识别器:@clasmethod
- 调用:通过‘类.xxx()’的方式来调用
- 特点:有个默认参数cls,在通过类调用类方法的时候参数 cls不需要传参,系统会自动将当前类传给cls(谁调用就指向谁)
@classmethod
def func2(cls):
print('类方法')
A.func2()
4.3 静态方法
- 定义:定义函数面前加装饰器,@staticmethon
- 调用:通过‘类.xxx()’的方式调用
- 特点:无
@staticmethod
def func3():
print('静态方法')
A.func3(10,20)
5、初始化方法
5.1 魔法方法
类中方法名前后都有两个_的对象方法就是魔法方法,不需要程序员调动,在特定情况下会被自动调用
5.2 _ _ init _ _方法 — 初始化方法
创建类对象的时候,系统会自动调用这个类中_ _ init _ 方法来对创建好的对象inx初始化操作,创建类对象的时候需不需要参数、需要几个参数由 _ _ init _ _的参数决定
class A:
def __init__(self):
print('init')
a1 = A()
a2 = A()
class B:
def __init__(self,x,y=20):
print(x,y)
b1 = B(100) #100,20
b1 = B(1,2) #1,2
5.3 _ _ repr _ _方法 -定制对象打印格式
定制当前类的对象的打印格式,这个方法的返回值是什么,打印这个类的对象的时候就打印什么(返回值必须是字符串)
6、属性 -定义类中的变量
6.1 类属性
- 怎么定义:直接在类中定义的变量叫类属性
- 怎么使用:通过 类.xxx的方式使用
- 什么时候用:如果属性的值不好因为对象不同而不一样就定义成类属性
class A:
#x是类属性
x = 10
#y是对象属性
def __init__(self):
self.y = 20
#通过类使用类属性
print(A.x)
#通过对象使用对象属性
a = A()
print(a.y)
6.2 对象属性
- 怎么定义:以self.属性名 = 值得形式定义在 _ _init _ _方法中
- 怎么使用:通过对象使用对象,对象.xxx
- 什么时候用:如果属性得值会因为对象不同而不一样就定义成类属性
- 给对象属性赋初值
'''
1)给一个固定的值
2)给一个没有默认值的参数
3)给一个有默认值的参数
'''
class B:
def __init__(self,b):
self.a=10
self.b=b
self.c=5
b1= B(20)
print(b1.a,b1.b,b1.c)
#在对象方法中使用对象属性
class Circle:
pi = 3.1415926
def __init__(self,r):
self.r=r
def area(self):
#在对象方法中使用self提供对象属性
return Circle.pi*self.r**2
c1 = Circle(10)
print(c1.r,c1.area())
7、继承
继承就是让子类直接拥有父类的属性和方法
7.1 怎么继承
'''
class 类名(父类1,父类2...):
类的说明
类的内容
'''
注意:object类是python的基类,python中所有的类都是直接或者间接继承自object
7.2、在子类中添加内容
- 添加类属性和方法 -直接在子类中定义类属性和方法
- 添加对象属性 -必须在子类的_ _ init _ 方法中通过‘super()’去调用父类_ _ init _ _ff
- 类中的方法调用过程:通过类或者对象调用方法的时候,会先看当前这个类中有没有对应的方法,如果有就直接调用,如果没有就看父类是否有,父类也没有就找父类的父类,直到找到object如果都没有找到这个方法,程序就会报错