Python的类和对象(一)

类和对象

一、编程思想

1、面向过程编程 - 逻辑、算法

遇到问题,考虑直接把逻辑思维转换成代码,解决问题。

2、函数式编程 - 函数

遇到问题,就考虑是否有一个这种功能的函数。

3、面向对象编程 - 类和对象

遇到问题,就考虑是否有一个对象能够帮我解决这个问题。

二、类和对象

1、定义

类:对拥有相同属性和相同功能的对象的集合(类是抽象的)
对象:类的实例(对象时具体的)

###2、从生活的角度看类的对象
如果说人是一个类,具体的某一个人就是一个对象。
如果电脑是一个类,具体的某台电脑就是一个对象。

二、类的声明

类:对拥有相同属性和相同功能的对象的集合(类是抽象的)
对象:类的实例(对象时具体的)

1、类的声明

语法:

class 类名(父类列表):
    类的内容

说明:

class      - 声明类的关键字
类名       - (要求!)标识符,不能是关键字;(规范)采用驼峰式命名,并且首字母要大写,见名知义
(父类列表) - 继承语法,可以省略,省略的时候相当于(object)
类的内容   - 主要包含属性和方法

补:

驼峰式命名:名字由多个单词组成时,通过单词首字母大写来区分不同的单词。

方法:方法就是声明在类中的函数就是方法。

2、类中的属性和方法

类中的属性 - 指的是在类中声明的变量,分为类的字段和对象属性。

类中的方法 - 值得是在类中声明的函数,分为对象方法 类方法和静态方法。

示例:

# 声明了一个Person类
class Person:
    """人类"""
    # 属性
    num = 61
    # 方法
    def eat(self):
        print('人在吃饭!')


# Person是类(类就是类型)
print(Person)

3、创建对象

类名() --> 创建对应的对象

示例:

# 创建Person类的对象xiao_ming
xiao_ming = Person()
print(xiao_ming)

三、对象方法

1、什么是对象方法

直接声明在类中,并且自带一个叫self的参数的函数。

2、对象方法的调用 - 通过对象调用对象方法

对象.对象方法(参数列表)

通过对象调用对象方法的时候,对象方法中的第一个参数self不用传参,系统会自动将当前对象传给self

哪个对象调用的 self就指向谁

**注意:**当前类的对象能做的事情,self都能够做

四、init方法和构造方法

1、魔法方法

Python类中,用__开头并且是__结尾的方法,就是魔法方法,魔法方法不用主动调用,都是自动调用的。

2、__init__方法

a.是对象方法
b.不需要自己调用,会被自动调用
c.在创建对象之后,专门用来对对象进行初始化的

3、构造方法

概念:函数名和类名一样的函数,就是构造方法

当我们创建类的时候,系统会自动创建这个类的构造方法,用来创建对象;

当我们通过构造方法创建对象的时候,系统会自动调用init方法来对创建好的对象进行初始化

注意:

  • 当init方法中除了self以外,如果需要别的参数,name这些参数是通过构造方法来传的参。
  • 只要调用了构造方法,就会产生新的对象(想要有对象,就得调用构造方法)
#创建构造方法的时候,系统自动创建一个函数,然后将这个对象返回
def Person(*args, **kwargs):
    在对中开辟空间创建对象
    对象.__init__(*args, **kwargs)
    return 对象

五、对象属性

1、什么是对象属性

a.声明在__init__方法中

b.声明的时候通过self.属性名 = 值

c.通过对象使用: 对象.属性

d.不同的对象,对象的属性值可能不一样

语法:

self.属性(变量名) = 值

说明:

变量名就是属性名,这个变量就是对象属性。

2、什么样的属性应该声明成对象属性

如果属性的值会因为对象不同而不一样,那这样的属性就应该声明成对象属性,反之就声明成类的字段

六、对象属性的增删查改

1、查(获取对象属性的值)

获取指定对象指定属性的值

  • a.对象.属性名 - 属性不存在的时候会报错
    如:print(dog1.name)
  • b.getattr(对象, 属性名, 默认值) - 当属性不存在的时候,如果设置了默认值 程序不会崩溃,而是返回默认值
    如:print(getattr(dog1, ‘name’))
  • c.对象.__getattribute__()

2、增、改

a.对象.属性 = 值

如:

dog1.name = '大黄'
print(dog1.name)
dog1.sex = '公'
print(dog1.sex)

b.setattr(对象, 属性名, 值)

如:

setattr(dog1, 'name', '热狗')
print(dog1.name)
setattr(dog1, 'name1', '肉狗')
print(dog1.name1)

注意:当属性存在的时候,对应的功能是修改属性的值,当属性不存在的时候,是添加属性。

3、删除

a. del 对象.属性

如:

del dog1.name
print(dog1.name)

b. delattr(对象, 属性名)

如:

delattr(dog1, 'color')
print(dog1.color)

**注意:**对象属性的增删改查都是针对指定那一个对象,不会影响其他的对象。

4、__slots__魔法

__slots__是用来约束当前这个类有哪些对象属性

例如:

class Student:
    # Student类的对象只能有name study_id和age属性
    __slots__ = ('name', 'study_id', 'age')

    def __init__(self, name, age):
        self.name = name
        self.study_id = '001'
        self.age = age

七、类的字段和内置类属性

1、类的字段

不会因为对象不同而不一样的数据就声明成类的字段

a.直接声明在类里面,函数的外面的变量就是类的字段

b.类的字段需要通过类来使用: 类.字段 - 不管是在类的里面还是类的外面都一样

示例:

class Person:
    # 声明了一个字段number
    number = 61

print(Person.number)

2、内置类属性

内置属性就是声明类的时候 类中已经声明好的属性(包含类的字段和对象的属性)

a.__name__
   类.__name__   - 获取类的名字(字符串)
b.__class__
   对象.__class__   - 获取对象对应的类(结果是一个类 原来类能做的事情它都可以做)
c.__dict__
   (了解)类.__dict__      - 获取当前类的所有的类的字段及其对应的值
   (重点)对象.__dict__    - 将当前对象所有的对象属性及其值转换成字典 key是属性名value是属性的值
d.__bases__
   类.__bases__    - 获取当前类的父类(以元组的形式返回 元组中的元素就是类的父类)
e.__module__
   类.__module__   - 获取当前类所在的模块名
f.__doc__
   类.__doc__      - 获取类的说明文档

示例:

class Dog:
    """说明文档:狗类"""
    # 类的字段
    type = '犬科'

    # 对象属性
    def __init__(self, name='', age=0, color=''):
        self.name = name
        self.age = age
        self.color = color

    # 对象方法
    def ear(self, food):
        print(f'{self.name}在吃{food}')

    # 类方法
    @classmethod
    def shout(cls):
        print('汪汪汪~~~')

    # 静态方法
    @staticmethod
    def bite():
        print('狗咬人!!!')


dog = Dog('小黑', 3, '黑色')

# a.__name__   - 获取类的名字(字符串)
print(Dog.__name__)

# b.__class__   - 获取对象对应的类(结果是一个类 原来类能做的事情它都可以做)
aa = dog.__class__
d1 = Dog()
d2 = aa()
print(d1, d2)
print(dog.__class__.__name__) # 获取对象对应的类的名字

# c.__dict__
#     (了解)类.__dict__      - 获取当前类的所有的类的字段及其对应的值
#     (重点)对象.__dict__    - 将当前对象所有的对象属性及其值转换成字典 key是属性名value是属性的值
print(Dog.__dict__)
print(dog.__dict__)

# d.__bases__   - 获取当前类的父类(以元组的形式返回 元组中的元素就是类的父类)
print(Dog.__bases__)

# e.__module__   - 获取当前类所在的模块名
print(Dog.__module__)
print(int.__module__)

# f.__doc__   - 获取类的说明文档
print(Dog.__doc__)
print(int.__doc__)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值