面对对象基础(python语言解析)
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