欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-04-20 09:49:34
Python 面对对象 基础 上文章目录Python 面对对象 基础 上一.类和对象二.类中的方法三. init方法四.对象属性和类属性五. 对象属性的增删改查一.类和对象1.什么是类,什么是对象?类就是拥有相同属性和相同功能的对象的集合对象就是类的实例2.定义类语法:class 类名(): 类的说明文档 类的内容(包含属性和方法)说明:class - 关键字类名 - 自己命名 要求:不能是关键字 规范:驼峰式命名,并且首字母大写3.定义对象(创建对...

Python 面对对象 基础 上

一.类和对象

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