python_笔记_day13_类_属性_增删改查

复习day12

1.迭代器和生成器

  • 迭代器:获取数据:next(迭代器),for循环遍历,数据来源:转换,生成器
  • 生成器:就是迭代器
def 函数名():
    yield 值

(表达 for 变量 in 序列 if 条件语句)

2.模块

  • 模块就是py文件
  • 包/库 就是文件夹
  • 导入模块中所有的内容
 from math import *
  • 阻止调用执行
if __name__ == '__main__':
    pass

3.异常处理

  • try:
    需要捕获异常的代码段
  • except:
    出现异常后对异常的处理代码
  • finally:
    不管try后面的代码是否异常,异常是否被捕获都会执行的代码

补充:三目运算符

  • 中的三目运算符: 表达式?值1:值2 -- 判断表达是否为真:如果是整个运算的结果是值1 ,否者是值2

  • python的三目运算符:值1 if 表达式: else 值2

print('奇数' if 22 % 2 else '偶数')


一.类

1. 什么是类,什么是对象

1.1官方定义

  • 类:就是拥有相同功能和相同属性的对象的集合
  • 对象:就是累的实例

1.2生活角度看类和对象

  • 如果人是类,yt就是对象,l也是对象
  • 如果电脑是类,具体到单个实物就是对象

2. 类的声明

2.1 语法

class 类名:
    类的内容

2.2 说明

  • class:声明类的关键字固定写法
  • 类名: 标识符,不能是关键字
    见名知意 ,采用驼峰式命名(采用通过单词首字母大写的方式来区分不同的单词),首字母大写
  • : 固定写法
    内的内容 - 主要包含: 类的说明文档, 属性(普通变量) ,功能(函数/方法)
class Person:
     """人类"""
     # ========属性===========
     # ========属性===========
     pass

3.对象怎么声明

对象 = 类()   - 创建指定的类的对象

4.类中的方法

4.1 什么是方法

  • 声明在类中的函数就叫方法

4.2 类中的方法

  • 有三种:对象方法,类方法,静态方法

4.2.1 对象方法

  • 直接声明在类中的函数,
  • 有默认参数self,通过对象调用的时候这个参数不用传参,因为系统会自动将当前对象传递给self
    (self,当前对象 - 谁调用self就指向谁,当前类的对象能做的事情self都能做)
  • 通过类的对象来调用(记!!!)
# class Person:
#     def eat(self, food):
#         print('人吃' + food)

4.2.2 类的方法

  • 声明函数前加@classmethod
  • 有默认参数cls,通过类调用的时候这个参数不用传参,因为系统会自动将当前类传递给cls
  • cls,当前类 - 谁调用谁就指向谁,当前类能做的事 cls
  • 通过类来调用: 类.类方法

4.2.3 静态方法

  • 声明函数前加@staticmethod
  • 没有默认参数
  • 通过类来调用:类.静态方法
class Person:
    """人类"""
#3 对象方法
    def eat(self, food):
        print(str(self) + '吃' + food)
        self.study('python')

    def study(self, type1):
        print('学习'+type1)

#2 类方法
    @classmethod
    def destroy(cls):
        cls.func1()
        print('人类改变环境')
    @classmethod
    def func1(cls):
        print('类方法')

#2 静态方法
    @staticmethod
    def beat_animal():
        print("上课,睡觉,打豆豆")


p1 = Person()
p2 = Person()
p1.eat('鸡')
p2.eat('炸鸡')
Person.destroy()
Person.beat_animal()

二.类的属性

  • 内中的属性分为:对象属性和字段

1.字段

  • 直接声明在类中的变量就叫字段
  • 字段要通过'类.字段'的方式来使用
  • 当属性的值不会因为对象不同而不同,这种属性就可以声明成类的字段
class Dog:
     """狗"""
# =======字段========
     numbers = 10


Dog.numbers =100
print(Dog.numbers)

2 对象属性


2.0什么数据init方法

  • init是类默认继承的一个魔法方法,用来初始化类:本质是对象方法,但不需要程序员自己调用,会自动调用
class Person :
    def __init__(self, name):
        print(name +'init方法')
p1 = Person('你好')
  • 通过类创建对象的时候,系统会自动调用类中的init方法,并且构造方法中的实参会全部传给init
  • 创建对象的时候需不需要参数,需要几个参数,看这个内的init方法
  • 了解 声明了的时候系统会自动给我们创建一个函数,这个函数的函数名和声明的类的类名一样,这个函数叫构造方法
  • 函数会在内存中开辟空间创建对象,然后用创建的对象去调用类的init方法,然后才将对象返回

2.1对象属性

  • 在init方法中,以'self.属性=值'的的形式声明
  • 对象属性要通过'对象.属性'的方式来使用
  • 当属性的值会因为对象的不同而不同的时候使用对象属性
class Dog:
    """狗"""
    # =======字段========
    numbers = 10
    def __init__(self, name = '大黄', age = 2, gender = 'boy', color = '白色'):
        self.color = color
        self.gender = gender
        self.age = age
        self.name = name
d = Dog()
print(d.color)
print(d.gender)
print(d.age)
print(d.name)
print('======================')
d1 = Dog(name='巫妖王', color='黑色', age=999, gender='前方高能')
print(d1.color)
print(d1.gender)
print(d1.age)
print(d1.name)
  • 练习: 声明一个学生类,用于属性:名字,电话,年龄,学号 拥有功能 学习(打印XXX在学XXX)
class Student_msg:
    def __init__(self, name, tel='00000000000', age=0, number='stu9999',
                 gender='boy'):
        self.name = name
        self.tel = tel
        self.age = age
        self.number = number
        self.gender = gender
    numbers = 19292
    def learing(self, subject: str):
        print(Student_msg.numbers)
        print('%s在学%s' % (self.name, subject))


a1 = Student_msg('大雕')
print(a1.number, a1.name, a1.gender, a1.age, a1.tel)
a1.learing('吃鸡')

a2 = Student_msg('大雕')
print(a1.number, a1.name, a1.gender, a1.age, a1.tel)
a1.learing('吃鸡')

3 声明类的时候方法的选择

  • 1 对象方法:实现函数的功能需要对象属性的时候,就使用对象方法
  • 2 类方法:实现函数的功能不需要对象属性,但是需要类的相关操作就使用类方法
  • 3 静态方法:实现函数的功能即不需要对象属性,也不需要类相关的操作就使用静态方法
  • 写一个矩形类,有属性:长和宽 方法:求面积,求周长
class Rect:
    """矩形"""
    def __init__(self,weigh,height):
        self.weigh = weigh
        self.height = height

    def area(self):
        return self.height*self.weigh

    def perimeter(self):
        return (self.height+self.weigh)*2

    def show_msg(self):
        return '矩形%dX%d的周长是:%d 面积是:%d'%(self.weigh,self.height,self.perimeter(),self.area())

p = Rect(30, 60)
print(p.show_msg())

三. python中的对象属性支持增,删,改,查

class Dog:
    def __init__(self, name):
        self.name =name
        self.age = 0


dog1 =Dog('大黄')
dog2 =Dog('猜猜')

1.查

  • a.对象.属性 - 获取指定属性对应的值,如果属性不存在会报错
  • b. getattr(对象,属性名,默认值) 获取指定属性对应的值
    当属性不存在有默认值的时候不报错,返回默认值
    没设置默认值的时候回报错
print(dog1.name)
print(getattr(dog1, 'name2', '无名狗'))

2.增,改

  • a.对象.属性 = 值 - 当属性不存在就添加属性,当属性存在修改属性的值
  • b.setattr(对象,属性名,值) - 当属性不存在就添加属性,当属性存在修改属性的值
dog1.name = '贝贝'
print(dog1.name)
a_name = 'color'
setattr(dog1, a_name, '白色')
print(dog1.color)
setattr(dog1, 'name', '静静')
print(dog1.name)

3 删

  • del 对象.属性
  • delattr(对象,属性名)
print(getattr(dog1, 'name', '无名狗,呜呜呜'))
del dog1.name
print(getattr(dog1, 'name', '无名狗,哦哦哦哦哦哦'))
delattr(dog2, 'age')
print(getattr(dog2, 'age', '还没出生的dog'))

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