python之面向对象

一、初识面向对象

函数编程的优缺点:

优点:

  • 减少代码的重复性

  • 增强代码的可阅读性

缺点:

  • 但凡更改或者增加一条需求,可能整个项目都随之改变.

面向对象编程的优点:

  • 是一类相似功能函数的集合,使你的代码更清晰化,更合理化。

  • 面向对象,要拥有上帝的视角看问题,类其实就是一个公共模板(厂房),对象就从具体的模板实例化出来

什么是类?什么是对象?

类:就是具有相同属性和功能的一类事物。

对象:就是类的具体表现

类和对象之间的关系:

类:

是一个大范围,是一个模子,它约束了事务有哪些属性,但是不能约束具体的值,只有两部分变量和函数

对象:

是一个具体的内容,它是模子的产物,它遵循了类的约束,同时给属性赋上了具体的值

类的格式:

class Student: #类名

    daily = '学习' #1️⃣属性,静态属性
    exam = '考试'


    def work(self): #2️⃣方法,动态方法
        print('每天上课')

    def homework(self):
        print('家庭作业')     

类的格式详解:

class Person: #类名可以随便定义,大写开头,要具有可描述性,建议使用驼峰体
   def __init__(self,name,sex,job,hb,weapon,ad): # 这个其实就是一个字典
      self.name = name #名字可以不相同
      self.sex = sex
      self.job = job
      self.hb = hb
      self.weapon = weapon
      self.ad = ad

alex = Person('alex', '不详', '搓澡工', 250, '搓澡', 1) #给类名传参

wusir = Person('wusir', '男', '法师', 500, '打狗棍', 1000)

# 调用
print(alex.__init__) # 可以查看整个alex的字典
# 输出结果如下
{'name': 'alexsb', 'sex': '不详', 'job': '搓澡工', 'hb': 250, 'weapon': '搓澡', 'ad': 1}

class 是关键字与def用法相同,定义一个类。
Human是此类的类名,类名使用驼峰(CamelCase)命名风格,首字母大写,私有类可用一个下划线开头

preson是一个类: Alex wusir都是这个类的对象

类有一个空间,存储的是定义在class中的所有名字

每一个对象又拥有自己的空间,通过对象名.__dict__就可以查看这个对象的属性和值

二、从类名的角度研究类

查看类名角度调用类中的属性

1. 查看类中的所有内容 类名.__dict__只用于获取类中全部内容
print(Student.__dict__)
2. 万能的.点. 来进行增删改查

类名操作静态属性

class Student:

    daily = '学习'
    exam = '考试'


    def work(self):
        print('每天上课')

    def homework(self):
        print('家庭作业')
        
# 通过操作类名的增删改查
print(Student.daily)   #1️⃣查看类属性
Student.cloth = '校服'  #2️⃣增加类属性
Student.exam = '不考试' #3️⃣修改类属性
del Student.cloth      #4️⃣删除类属性
print(Student.__dict__) #5️⃣查看类名Student中全部内容

类的实例化过程方法

#方法 6️⃣类名+括号
obj = Student() # 类名加括号过程就叫做实例化过程
print(obj) # 对象,实例,结果是一个对象的内存地址

三. 从对象的角度研究类

什么是对象

对象是从类中出来的,只要是类名加上(),这就是一个实例化过程,这个就会实例化一个对象

对象名操作动态方法

增:

# 1️⃣属性的增加
alex.money = 1000000 

# 还以上面格式为例
# 打印该对象增加值之前
print(alex.__dict__)
# 输出结果
{'name': 'alexsb', 'sex': '不详', 'job': '搓澡工', 'hb': 250, 'weapon': '搓澡', 'ad': 1}
# 打印该添加属性后的对象
print(alex.__dict__)
# 输出字结果
{'name': 'alexsb', 'sex': '不详', 'job': '搓澡工', 'hb': 250, 'weapon': '搓澡', 'ad': 1, 'money': 1000000}

# 2️⃣属性的删除
del alex.money

# 打印删除字典键值对之后
{'name': 'alexsb', 'sex': '不详', 'job': '搓澡工', 'hb': 250, 'weapon': '搓澡', 'ad': 1}

# 3️⃣属性的修改
alex.name = 'alex'

# 打印修改之后的结果
{'name': 'alex', 'sex': '不详', 'job': '搓澡工', 'hb': 250, 'weapon': '搓澡', 'ad': 1}

# 4️⃣属性的查询
print(alex.name)

# 查对象
print(alex.__dict__)

# 打印查询的结果
alex

四、实例化一个对象

实例化一个对象总共发生了三件事

1. 在内存中开辟了一个对象空间。

2. 自动执行类中的__init__方法,并将这个对象空间(内存地址)传给了__init__方法的第一个位置参数self。

3. 在__init__方法中通过self给对象空间添加属性。

格式:

class Student:

    daily = '学习'
    exam = '考试'

    def __init__(self,n,a,h): #类 可以当做一个模板 1️⃣给这个设置形参
        self.name = n
        self.age = a
        self.hobby = h

    def work(self):
        print('每天上课')

    def homework(self):
        print('家庭作业')

liye = Student('小黑',18,'洗头') #2️⃣传参,然后定义一个变量接收
print(liye.__dict__)
mc_sq = Student('骚强',20,'黑玫瑰发廊') #3️⃣传另外一个参,然后定义一个变量接收

对象调用对象的属性

liye = Student('小黑',18,'洗头') #实例化过程
mc_sq = Student('骚强',20,'黑玫瑰发廊') #实例化过程
print(liye.name)  #1️⃣对象调用对象的属性
print(mc_sq.age) #2️⃣对象调用对象的属性

# 输出结果
小黑
20

对象调用类中的属性

print(mc_sq.__dict__) #1️⃣调用对象中的全部内容
print(liye.daily) #2️⃣对象调用类中的属性
print(mc_sq.exam) #3️⃣对象调用类中的属性

# 输出结果
{'name': '骚强', 'age': 20, 'hobby': '黑玫瑰发廊'}
学习
考试

对象调用类中的方法

class Student:

    daily = '学习'
    exam = '考试'

    def __init__(self,n,a,h): #1️⃣实例化过程将值传入到这个 方法中
        self.name = n
        self.age = a
        self.hobby = h

    def work(self,c): #2️⃣对象调用类中的方法,self指向同一个内存地址
        self.color = c
        print(f'{self.name}每天上课')

    def homework(self):
        print('家庭作业')

liye = Student('小黑',18,'洗头') #实例化过程
liye.work('绿油油') #3️⃣给类中方法传值,传给word方法中的c,self共用同一个内存liye
print(liye.__dict__) #查看对象的全部内容

# 输出结果
liye.work('绿油油')
print(liye.__dict__)

五、什么是self?

  • self就是类中的方法的第一个位置参数
  • 如果通过对象执行此方法,解释器就自动的将此对象空间当做实参传给self
  • 约定俗成:类中的方法第一个参数一般都设置成self

六、一个类可以实例化多个对象

例题:

# 人狗大战
# 人的类
class Person:
    def __init__(self,name,sex,job,hp,weapon,ad):
        self.name = name
        self.sex = sex
        self.job = job
        self.level = 0
        self.hp = hp
        self.weapon = weapon
        self.ad = ad

    def 搓(self,dog):
        dog.hp -= self.ad
        print('%s给%s搓了澡,%s掉了%s点血,%s当前的血量%s'%(self.name,dog.dog_name,dog.dog_name,self.ad,dog.dog_name,dog.hp))


# 狗的类
class Dog():
    def __init__(self,name,hp,ad,kind):
        self.dog_name = name
        self.hp = hp
        self.ad = ad
        self.kind = kind

    def 添(self,person):
        if person.hp >= self.ad:
            person.hp -= self.ad
        else:
            person.hp = 0
        print('%s添了%s一下,%s掉了%s点血,%s当前的血量%s'%(self.dog_name,alex.name,alex.name,self.ad,alex.name,person.hp))

alex = Person('alex', '不详', '搓澡工', 250, '搓澡巾', 1)
二哈 = Dog('二哈',100,2000,'哈士奇')

alex.搓(二哈)
二哈.添(alex)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,110评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,443评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,474评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,881评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,902评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,698评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,418评论 3 419
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,332评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,796评论 1 316
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,968评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,110评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,792评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,455评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,003评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,130评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,348评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,047评论 2 355