类
类的定义:某个个体之间具备了相同的特征和行为,叫做类
类的定义方式:
: class 类名:
: class 类名():
: class 类名(object):
类的命令规则:一般采用驼峰式的命名规则,且类名要见名知意
类属性
1.类属性的定义:所有成员具有的共同属性,叫做类属性,类 属性也叫做类变量
2.类属性定义位置:一般定义在类里面,方法外面
3.类属性的获取方式:
> 通过类名获取:类名.类属性
> 通过对象名获取:对象名.类属性
4.类属性的修改:只能通过类名.类属性=新值,进行修改
对象
1.对象的概念:对象是一类事物中的一个个个体,一个对象也被称为一个实例,比如,一个car类,一个个实例就是奔驰,宝马,三菱
2.对象的创建和实例化:对象名=类名() ,比如,mycar=Car()
3.类和对象的关联关系:必须现有类,才能有对象
4.如果是对象的内存地址相同的话,表示的是同一个对象,可是使用id(变量名)获取类存地址
5.类和类,类和对象的比较
① 同一个类相比较,内存地址是相同的
②类和属性比较,结果为假
③不同属性和不同属性比较,内存地址不一样,结果为假
对象属性
1.定义:实例属性,也叫做对象属性指的是一个个个体具体的特征,这些特征可以是一样的,也可以是不一样的
2.实例属性的定义位置:定义在类中的***init(self)***方法里面
3.当类中的__init__()方法中有参数是,实例化对象时,必须要传参数,当创建对象时自动调用__init__()里面的内容
4.init()返回一个None,所以,不能再此方法中使用return返回值
5.实例属性的获取:在类外面使用:对象名.实例属性,如果是在类里面或者方法里面。使用self.实例属性
6.修改实例属性:对象名.实例属性=值。注意,类不能修改和获取实例属性
self
在类定义的过程中,代表一个实例(对象),self代表的就是不同的实例对象,在实例未创建出来,使用self给对象占位
类属性和实例属性案例
class Student:
"""封装学生类"""
# 定义类属性
identify = 'student'
# 使用__init__()函数定义实例属性
def __init__(self, stu_name, stu_age, stu_sex, english_score, mathematics_score, chines_score, stu_duty):
"""
:param stu_name: 英语成绩
:param stu_age: 英语成绩
:param stu_sex: 英语成绩
:param english_score: 英语成绩
:param mathematics_score: 数学成绩
:param chines_score: 语文成绩
:param stu_duty: 学生职责
"""
# 使用self.属性=变量来定义属性
self.stu_name = stu_name
self.stu_age = stu_age
self.stu_sex = stu_sex
self.english_score = english_score
self.mathematics_score = mathematics_score
self.chines_score = chines_score
self.stu_duty = stu_duty
print('姓名是{},年龄是{},性别是{},英语成绩:{},数学成绩:{},语文成绩:{},职责是:{}'.format(self.stu_name, self.stu_age, self.stu_sex,
self.english_score, self.mathematics_score,
self.chines_score, self.stu_duty))
# 创建实例对象
wenwen = Student('huahau', 18, '女', 90, 78, 99, '学习委员')
# 通过实例对象获取修改类属性
wenwen.stu_name = 'wenwen' # wenwen
方法
定义在类里面的函数就是方法,方法代表的是类或者实例的行为
方法的分类:一般常见的有实例方法、类方法、静态方法和魔术方法
实例方法
1.定义:一个对象特有的行为,方法后面有self的就是实例方法,并且实例方法只能通过对象名去调用
2.格式和调用方式:
3.调用时机:必须是对象被创建后才能调用
类方法
1.定义:类方法必须要放在类里面,且方法前面必须要有@classmethod装饰器,类方法的调用可以在对象未声明之前调用
2.格式和调用方式:
3.调用时机:对象未创建之前可以调用,对象创建后也可以通过对象名去调用
静态方法
1.定义:不依赖于对象和类, 在定义的方法前面需要声明@staticmethod装饰器
2.格式和调用方式:
3.调用时机:对象未创建之前可以通过类名去调用,对象创建后也可以通过对象名去调用
魔术方法
魔术方法就是不用手动去调用,python解释器会自动调用的方法叫做魔术方法
1.init(self):初始化方法,一般在此函数中定义对象属性,在创建对象的时候系统会自动调用该方法
2.str(self):一般在此函数里面使用return,将需要展示在控制台的属性放在return后面,在打印对象名的时候会在控制台显示对象属性信息
方法案例:
import random
#定义类
class Person:
#定义类属性
type='preson'
#定义对象属性
def __init__(self,name,age,sex):
self.name=name
self.age=age
self.sex=sex
#定义实例方法:
def eat(self,food):
print("{}正在吃{}".format(self.name,food))
#定义类方法
@classmethod
def run(cls):
print("{}正在跑步".format(cls.type))
#定义静态方法
@staticmethod
def sleep():
hour=random.randint(1,8)
print("已经睡了{}小时".format(hour))
#使用类调用类方法
Person.run()
#使用类调用静态方法
Person.sleep()
#创建实例
zhangsan=Person('张三',18,'男')
#调用实例方法
zhangsan.eat('红烧肉')
#调用类方法
zhangsan.run()
#调用静态方法
zhangsan.sleep()
继承
1.继承:指的是子类继承父类所有的属性和方法,如果子类有跟父类同名的方法,优先使用子类的方法
2.方法的重写:当继承过来的父类的方法不满足要求时,可以重写父类的方法
3.多重继承:同时继承多个类
4.继承的搜索顺序使用类名.__mro__查看
5.普通的继承格式:
6.多继承格式:
继承案例
#定义人类
class Person:
def __init__(self,name,age,sex,slary):
self.name=name
self.age=age
self.sex=self
self.slary=slary
#定义方法
def getSlary(self):
return self.slary
#定义销售员类,继承人类
class Salers(Person):
def __init__(self,name,age,sex,slary,saler_money):
"""
:param name: 销售员姓名
:param age: 销售员年龄
:param sex: 销售员性别
:param slary: 销售员基本工资
:param saler_money: 销售员提成
"""
#调用父类的__init__方法
super().__init__(name,age,sex,slary)
self.saler_money=saler_money
#重写父类的方法
def getSlary(self):
money=self.slary+self.saler_money
return money
#定义雇员类,继承父类
class Employee(Person):
def __init__(self,name,age,sex,slary,employed_id,hour):
super().__init__(name,age,sex,slary)
self.employed_id=employed_id
self.hour=hour
#创建实例对象
s=Salers('九九',18,'男',1000,2000)#name,age,sex,slary,saler_money
money=s.getSlary()
print('最终工资是:',money)#最终工资是: 3000
练习二
#coding:utf-8
class Person:
#d
def __init__(self,name,age):
self.name=name
self.age=age
#
def eat(self):
print('{}正在吃东西'.format(self.name))
def run(self):
print('{}正在跑步'.format(self.name))
#定义子类
class Student(Person):
def __init__(self,name,age,clazz):
super().__init__(name,age)
self.clazz=clazz
def eat(self,food):
super().eat()
print('{}正在吃{}'.format(self.name,food))
class Employee(Person):
def __init__(self,name,age,salary,manager):
super().__init__(name,age)
self.salary=salary
self.manager=manager
s=Student('jack',18,'高三')
s.eat('红烧肉')
s.run()
e=Employee('jiajia',14,5000,'陛下')
e.eat()
e.run()