目录
Python面向对象01/初识/结构/类名的角度研究类/对象的角度研究类/self
内容大纲
1.面向对象初识
2.面向对象的结构
3.从类名的角度研究类
4.从对象的角度研究类
5.self是什么?
6.一个类可以实例化多个对象
1.面向对象初识
#1.面向过程编程vs函数式编程
# 减少了重复代码
# 增强了可读性
#2.函数式编程vs面向对象编程
#面向对象的第一个优点:
# 对相似功能的函数,同一业务下的函数进行归类,分类
#面向对象的第二个优点:
# 站在上帝的角度构建代码,类就是一个公共的模板,对象就是从模板中实例化出来的,得到对象就是得到了一切.
类:具有相同属性和功能的一类事物
对象:某个类的具体表现
2.面向对象的结构
类名:驼峰体,不要使用下划线
#class Human:(Human后面的括号可以有,也可以没有,一般是没有)
# mind = '有思想' 一.类的属性(静态属性/静态字段)
# def work(self): 二.动态方法
# print("人类都会工作")
3.从类名的角度研究类
3.1 类名操作类中的属性
#1.类名查看类中的所有方法
#print(类名.__dict__)
#2.类名操作类的静态属性,万能的点.
# 增:Human.body = "有头"
# 删:del Human.mind
# 改:Human.mind = "无脑"
# 查:Human.language
3.2 类名调用类中的方法
#一般类中的方法,不会通过类名调用
总结:一般类名就是操作类中的属性
4.从对象的角度研究类
4.1 实例化一个对象发生的三件事
#对象是从类中出来的,只要是类名加上(),这就是一个实例化过程,这个就会实例化一个对象
#1.在内存中开辟了一个对象空间。
#2.自动执行类中的__init__方法,并将这个对象空间(内存地址)传给了__init__方法的第一个位置参数self。
#3.在__init__ 方法中通过self给对象空间添加属性。
4.2 对象操作对象空间的属性
#1.对象查询对象中所有属性。 对象.__dict__
#2.对象操作对象中的单个属性。 万能的点 .
4.3 对象查看类中的属性 (注意:只能查看,不能更改)
#class Human:
#
# mind = '有思想'
# language = '实用语言'
# def __init__(self,name,sex,age,hobby):
# self.n = name
# self.s = sex
# self.a = age
# self.h = hobby
#
#obj = Human('barry','男',18,'运动')
#print(obj.mind)
#print(obj.language)
#obj.a = 666
#print(obj.a)
4.4 对象查看类中的方法
类中的方法一般都是通过对象执行的(除去类方法,静态方法外),并且对象执行这些方法都会自动将对象空间传给方法中的第一个参数self.
#class Human:
#
# mind = '有思想'
# language = '实用语言'
# def __init__(self,name,sex,age,hobby):
# self.n = name
# self.s = sex
# self.a = age
# self.h = hobby
#
# def work(self):
# print(self)
# print('人类会工作')
#
# def tools(self):
# print('人类会使用工具')
#
#obj = Human('barry','男',18,'运动')
#obj.work()
#obj.tools()
5. self 是什么
#self其实就是类中方法(函数)的第一个位置参数,只不过解释器会自动将调用这个函数的对象传给self。所以咱们把类中的方法的第一个参数约定俗成设置成self, 代表这个就是对象
6.一个类可以实例化多个对象
#obj1= Human('小胖','男',20,'美女')
#obj2= Human('相爷','男',18,'肥女')
#print(obj1,obj2)
#print(obj1.__dict__)
#print(obj2.__dict__)
7.今日练习
# 1.完成下列功能:
# 1.创建一个人类Person,再类中创建3个静态变量(静态字段)
# animal = '高级动物'
# soul = '有灵魂'
# language = '语言'
# 2.在类中定义三个方法,吃饭,睡觉,工作.
# 3.在此类中的__init__方法中,给对象封装5个属性:国家,姓名,性别,年龄,身高.
# 4.实例化四个人类对象:
# 第一个人类对象p1属性为:中国,alex,未知,42,175.
# 第二个人类对象p2属性为:美国,武大,男,35,160.
# 第三个人类对象p3属性为:你自己定义.
# 第四个人类对象p4属性为:p1的国籍,p2的名字,p3的性别,p2的年龄,p3 的身高.
# 5.通过p1对象执行吃饭方法,方法里面打印:alex在吃饭.
# 6.通过p2对象执行吃饭方法,方法里面打印:武大在吃饭.
# 7.通过p3对象执行吃饭方法,方法里面打印:(p3对象自己的名字)在吃饭.
# 8.通过p1对象找到Person的静态变量 animal
# 9.通过p2对象找到Person的静态变量 soul
# 10.通过p3对象找到Person的静态变量 language
# class Person:
# animal = '高级动物'
# soul = '有灵魂'
# language = '语言'
# def __init__(self,countries,name,sex,age,height):
# self.countries = countries
# self.name = name
# self.sex = sex
# self.age = age
# self.height = height
# def eat(self):
# print(f'{self.name}在吃饭')
# def sleep(self):
# print(f'{self.name}在睡觉')
# def work(self):
# print(f'{self.name}在工作')
# p1 = Person("中国","alex","未知","42","175")
# p2 = Person("美国","武大","男","35","160")
# p3 = Person("中国","meet","女","42","170")
# p4 = Person("中国","武大","女","35","170")
# p1.eat()
# p2.eat()
# p3.eat()
# print(p1.animal)
# print(p2.soul)
# print(p3.language)
2.通过自己创建类, 实例化对象
# 在终端输出如下信息
# 小明,10岁,男,上山去砍柴
# 小明,10岁,男,开车去东北
# 小明,10岁,男,最爱大保健
# 老李,90岁,男,上山去砍柴
# 老李,90岁,男,开车去东北
# 老李,90岁,男,最爱大保健
# 老张…
# class Person:
# def __init__(self,name,age,sex):
# self.name = name
# self.age = age
# self.sex = sex
# def climb(self):
# print(f'{self.name},{self.age},{self.sex},上山去砍材')
# def cars(self):
# print(f'{self.name},{self.age},{self.sex},开车去东北')
# def hobby(self):
# print(f'{self.name},{self.age},{self.sex},最爱大保健')
# p1 = Person("小明","10岁","男")
# p2 = Person("老李","90岁","男")
# p1.climb()
# p1.cars()
# p1.hobby()
# p2.climb()
# p2.cars()
# p2.hobby()
# 3.设计一个汽车类。
# 要求:
# 汽车的公共属性为:动力驱动,具有四个或以上车轮,主要用途载运人员或货物。
# 汽车的功能:run, transfer.
# 具体的汽车的不同属性:颜色,车牌,类型(越野,轿车,货车等)。
# class Cars:
# Power_drive = '具有四个或以上车轮'
# use = '载运人员或货物'
# def __init__(self,color,license,type):
# self.color = color
# self.license = license
# self.type = type
# def run(self):
# pass
# def transfer(self):
# pass
# obj = Cars("red","BMW","cross-country")
4.模拟英雄联盟写一个游戏人物的类(升级题).
# 要求:
# 1.创建一个Game_role的类.
# 2.构造方法中给对象封装name, ad(攻击力), hp(血量).三个属性.
# 3.创建一个attack方法, 此方法是实例化两个对象, 互相攻击的功能:
# 例: 实例化一个对象盖伦, ad为10, hp为100
# 实例化另个一个对象剑豪ad为20, hp为80
# 盖伦通过attack方法攻击剑豪, 此方法要完成'谁攻击谁,谁掉了多少血, 还剩多少血'的提示功能.
# class Game_role:
# def __init__(self,name,ad,hp):
# self.name = name
# self.ad = ad
# self.hp = hp
# def attack(self,obj2):
# obj2.hp -= self.ad
#
# print(f'{self.name}攻击{obj2.name},{obj2.name}掉了{self.ad}血, 还剩{obj2.hp}血')
# obj1 = Game_role("盖伦",10,100)
# obj2 = Game_role("剑豪",20,80)
# obj1.attack(obj2)