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'))

  • 注意对象属性的增删改查只针对单个对象
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。