类的声明
1.什么是类
类就是对用有相同属性和相同功能的对象的集合
对象就是类的实例
类是抽象的,对象是具体的
从生活看类和对象
如果人是一个类,具体的每个人就是对象
2.类的声明
class 类名(父类列表):
类的说明文档
类的内容
说明:
class:Python中声明类的关键字
类名:标识符,不能是关键字;使用驼峰命名法,见名知义
驼峰命名法:如果一个名字由多个单词组成,第一个单词首字母小写,后面每个单词首字母大写
PEP8命名规范:如果一个名字由多个单词组成,所有字母小写,单词之间用下划线隔开
(父类列表):继承语法,让声明的类继承括号中的父类,这个结构可以省略,让当前类继承python的基类object
类的说明文档:注释,对类进行说明
类的内容:包含属性和方法
方法:声明在类中的函数
声明类
class Person:
def eat(self):
print('吃饭饭')
3.对象的声明
格式:
对象名 = 类名()
构造方法
对象名 --> 变量名
类名 --> 必须是声明过的类
p1 = Person()
p2 = Person()
对象方法
1.类的内容包括属性和方法,方法分为对象方法,类方法,静态方法
对象方法:直接声明在类中的函数就是对象方法,对象方法都有一个默认参数self,需要通过对象来调用
self不需要传参数,系统会自动将当前参数传给self
当前对象:谁调用当前对象的方法,self就指向谁,self就是当前类的对象,类的对象能做的,self都能做
class Person:
'''人类'''
# 对象方法eat
def eat(self):
print('chifan')
构造方法和init方法
1.构造方法:函数名和类名一样的方法,作用是用来创造对象,
在声明类的时候,系统会自动为这个类创建构造方法
创建对象的过程:调用构造方法在内存中开辟空间创造对象,并且会自动调用init
对这个对象进行初始化
2.init方法
对象方法
不需要手动调用,创建完对象后自动调用
class Dog:
def __init__(self):
print(self)
print('')
3.带其他参数的构造方法
init方法里面的参数要通过构造方法来传
class Person
def __init__(self,name,age):
print(name,age)
p1 = Person('小红',20)
对象的属性
类的内容包函属性和方法,属性又分为对象属性和类的字段
属性:用来在类中保存数据的变量
对象属性:属性的值会因为对象的不同而不同,这种属性就需要声明成对象属性,如人的姓名等
1.对象属性的声明
a.必须声明在init方法中
b.声明格式:self.属性 = 初值
2.使用对象属性:self.属性 = 初值
声明一个人类,要求有名字年龄和性别属性
class Person:
def init(self,name1,age1,sex1):
self.name = name1
self.age = age1
self.sex = sex1
p1 = Person('张三',18,'男')
print(p1.name)
对象属性的增删改查
class Student:
def init(self,name,age = 18,stu_id = 12):
self.name = name
self.age = age
self.stu_id = stu_id
1.查(获取对象属性的值)
方法1:对象.属性 -->获取属性值,若不存在会报错
print(stu1.name)
方法2:getattr(对象,属性,默认值) -->
获取属性的默认值,若果设置了默认值,当属性不存在的时候,不会报错,若未设置默认值,还是会报错
print(getattr(stu1,'name2','张三'))
方法3.对象.getattribute(属性名)-->获取指定的属性值,属性不存在会报错
2.增(给对象增加属性)
方法1.对象.属性 = 值(属性不存在)
注意:给对象添加属性,只能添加到当前对象中,不会影响到当前类其他对象
方法2.setattr(对象,属性名,属性值)
对象.setattribute(属性名)-->
3.修改
stu3.name = '李四'
print(stu1.name)
setattr(stu3,'name','hehe')
print(stu3.name)
4.删除(删除对象属性)
注意:删除只删除当前对象的属性,对当前类其他属性没有影响
方法1.
del 对象.属性
方法2.
delsttr(对象,属性名)
方法3.
对象.gdelattribute(属性名)-->删除指定的属性值,属性不存在会报错
对象的应用
class Student:
def __init__(self,name,age = 18,stu_id = 12):
self.name = name
self.age = age
self.stu_id = stu_id
stu1 = Student('小明')
1.查(获取对象属性的值)
方法1:对象.属性 -->获取属性值,若不存在会报错
print(stu1.name)
方法2:getattr(对象,属性,默认值) -->
获取属性的默认值,若果设置了默认值,当属性不存在的时候,不会报错,若未设置默认值,还是会报错
print(getattr(stu1,'name2','张三'))
方法3.对象.getattribute(属性名)-->获取指定的属性值,属性不存在会报错
2.增(给对象增加属性)
方法1.对象.属性 = 值(属性不存在)
注意:给对象添加属性,只能添加到当前对象中,不会影响到当前类其他对象
方法2.setattr(对象,属性名,属性值)
对象.setattribute(属性名)-->
3.修改
stu3.name = '李四'
print(stu1.name)
setattr(stu3,'name','hehe')
print(stu3.name)
4.删除(删除对象属性)
注意:删除只删除当前对象的属性,对当前类其他属性没有影响
方法1.
del 对象.属性
方法2.
delsttr(对象,属性名)
方法3.
对象.gdelattribute(属性名)-->删除指定的属性值,属性不存在会报错
slots魔法
属性: 对象属性,类的字段
1.类的字段:声明在类里面,函数外面的字段,使用的时候要通过类来使用
应用:类名.字段
2.__slots--:用来约束当前类的对象的属性有哪些
class Dog:
num = 10
__slots__ = ('color','name','type')
def __init__(self,color,name,type):
self.color =color
self.name = name
self.type = type
内置类属性
class Person:
'''人类'''
# 类的字段
num = 61
# 对象属性
def __init__(self,name,age,sex):
self.name = name
self.age = age
self.sex = sex
#对象方法
def run(self):
print('%s在跑'% self.name)
p1 = Person('小明',18,'男')
1.name
类.name -->获取当前类的名字
print(Person.__name__,type(Person.__name__))
2.doc
类.doc -->获取类的说明文档
print(Person.__doc__)
3.class
对象.class -->获取对象的类,相当于直接使用当前类
my_class = p1.__class__ # my_class相当于一个类
print(p1.__class__)
4.dict
类.dict -->获取当前类所有类的字段和其对应的值,以字典的形式返回
对象.dict --> 获取当前对象所有的属性和其对应的值,以字典的形式返回
print(Person.__dict__)
5.module
类.module -->获取当前类所在模块名
print(Person.__module__)
6.base
类.base -->获取当前类的父类,返回一个元组,元组的元素是一个类