面对对象基础(python语言解析)

2022-08-10,,,,

Python 面对对象 基础

文章目录

      • Python 面对对象 基础 上
          • 一.类和对象
          • 二.类中的方法
          • 三. init方法
          • 四.对象属性和类属性
          • 五. 对象属性的增删改查

一.类和对象

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

类就是拥有相同属性和相同功能的对象的集合

对象就是类的实例

2.定义类

语法:
class 类名():
    类的说明文档
    类的内容(包含属性和方法)
说明:
class - 关键字
类名 - 自己命名
	  要求:不能是关键字
	  规范:驼峰式命名,并且首字母大写

3.定义对象(创建对象)

语法:
类()
说明:
类名 - 是已经定义好的类的类名
二.类中的方法

类中的方法分为三种:对象方法、静态方法、类方法

1.对象方法

怎么定义:直接定义在类中的函数就是对象方法

特点:自带参数self(self在通过对象调用的时候不用传参,系统会自动将当前对象传给self)

怎么调用:用对象去调用(对象.方法名())

2.类方法

怎么定义:定义函数前加装饰器 @classmethod

特点:自带参数cls (cls指向当前类)

怎么调用:用类调用 ( 类.方法名() )

3.静态方法

怎么定义:在定义函数前加装饰器 @staticmethod

特点:没有默认参数

怎么调用:用类调用 ( 类.方法名() )

class Dog:
    # eat 是对象方法
    def eat(self):
        print('狗啃骨头')

    # count是类方法
    @classmethod
    def count(cls):
        print('狗的数量是:100')

    @staticmethod
    def func():
        print('静态方法')

# 创建对象
dog1 = Dog()

# 用对象调用对象方法
dog1.eat()

# 用类调用类方法
Dog.count()

# 用类调用静态方法
Dog.func()

注意:从本质上讲,类中的所有的方法都可以用对象和类调用,但是不能这样做

Dog.eat()如果用类来调用对象方法,self就会变成普通的参数,没有存在的价值

dog1.count()用对象调用类方法的时候cls指向的还是类

三. init方法

1.什么是构造方法?

构造方法:函数名和类名是一样的,用来创建对象的方法就是构造(python中的构造方法在定义类的时候,系统已经自动创建好了)

2.init方法

  • __init__方法又叫初始化方法,用来在创建对象的时候对对象进行初始化操作的.

  • 当我们通过类创建对象的时候,系统会自动调用__init__方法来对创建出来的对象进行初始化.

  • 调用构造方法创建对象的时候需不需要参数,需要几个,看被自动调用的__init__.

class Person:
    def __init__(self):
        print('初始化方法')


p1 = Person()
p2 = Person()
# 初始化方法
# 初始化方法

这里在创建对象的时候就会自动调用__init__方法

四.对象属性和类属性

1.对象属性

对象属性:对象属性会因为对象不同而不一样

①对象属性定义在init方法中

②以self.属性名 = 值 的方式定义

③通过 对象.属性名的方式使用属性

class Person:
    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.gender = gender

    def eat(self):
        print('{}吃饭'.format(self.name))


p1 = Person('张三', 18, '男')  # 创建一个p1 Person对象
print(p1.name)  # 获取p1对象的name属性
p1.eat()	# 调用p1的eat方法

2.类属性

直接定义在类中的变量就是类属性

类属性的值不会因为对象不同而不一样

class Dog:
    num = 100  # 定义狗的数量为100,这里的num就是类属性
五. 对象属性的增删改查

python中类的对象的属性支持增删改查

class Student:
    def __init__(self, name, age=0, gender='男', score=0):
        self.name = name
        self.age = age
        self.gender = gender
        self.score = score

    def __repr__(self):
        return '<{}>'.format(str(self.__dict__)[1:-1])


stu1 = Student('小明')
stu2 = Student('小花')

1.查(获取属性的值)

语法:
对象.属性  - 获取对象指定属性相应的值;属性不存在会报错
getattr(对象,属性名)  -  获取对象指定属性对应的值,属性不存在会报错
getattr(对象,属性名,默认值)  -  获取对象指定属性对应的值,属性不存在返回默认值
print(stu1.name)   # 小明
print(stu1.height)  # 这里stu1不存在height属性,报错
print(getattr(stu1, 'name'))  # 小明
print(getattr(stu1, 'age'))  # 0
print(getattr(stu1, 'name1', '小新'))  # 小新

​ 那么既然我们可以直接用对象.属性名的方式获取对象属性,那么getattr在这里存在的意义到底是什么呢?仅仅是为了让对象属性不存在的时候返回默认值吗?当然不是

请看下面这个需求,让我们进一步了解getattr存在的意义

例:根据输入的内容获取对象属性的值(name,age,gender,score)

value = input('请选择要获取的属性(name,age,gender,score):')
# 然后直接  对象.value 来获取吗? 这里会直接报错,因为value是个字符串
# 这里就体现了getattr的进一步用法:
print(getattr(stu1, value)) # 这样我们就可以满足我们的需求,更加方便的获取到对象的属性

2.改、增

对象.属性 =- 当属性不存在就给对象添加属性,属性存在的时候就修改指定属性的值
setattr(对象,属性名,值)- 当属性不存在就给对象添加属性,属性存在的时候就修改指定属性的值
stu1.name = 'xiaoming'
print(stu1)

setattr(stu1, 'weight', 80)
print(stu1)   # 没有这个属性,添加weight这个属性并赋值

3.删

del 对象.属性 - 删除对象中指定的属性,没有这个属性会报错
delattr(对象,属性名) - 删除对象中指定的属性,没有这个属性会报错
del stu2.age
print(stu2)

delattr(stu2, 'gender')
print(stu2)
# 两种方法都能满足删的需求

本文地址:https://blog.csdn.net/plyzz/article/details/107114519

《面对对象基础(python语言解析).doc》

下载本文的Word格式文档,以方便收藏与打印。