导图社区 面向对象基础
这是一篇关于面向对象基础的思维导图,主要内容包括:类对象和类属性,一切皆对象,构造方法_ _init_ _。阐述了Python面向对象编程中构造方法的使用以及类属性的操作要点,帮助理解如何正确初始化和操作类及其实例。
社区模板帮助中心,点此进入>>
互联网9大思维
组织架构-单商户商城webAPP 思维导图。
域控上线
python思维导图
css
CSS
计算机操作系统思维导图
计算机组成原理
IMX6UL(A7)
考试学情分析系统
面向对象基础
构造方法_ _init_ _
class Dog: # 类属性 legs_num = 4 has_hair = True has_tail = True # 方法 def bark(self): print("self:::", self) print(f"{self.name}正在狂吠") def bite(apple, person): print(f"{apple.name}这条狗咬{person}") def fetch(self): print(f"{self.name}捡球") def show_info(self): print(f"名字:{self.name},品种:{self.breed},颜色:{self.color},年龄:{self.age},体重:{self.weight}")
使用构造方法原因
代码冗余
每次创建对象时都需要分别为每个对象赋值实例属性,这会导致代码冗余和重复劳动。
可维护性差
如果类的属性发生变化或新增属性,需要修改多处代码来适应这些变化,而如果使用构造方法来初始化属性,则只需要在一个地方进行修改。
方法一: 使用函数调用方式(不推荐)
step1. 搭建函数
def init_prop(self, name, breed, color, age): self.name = name self.breed = breed self.color = color self.age = age
step2. 调用函数 用于初始化
alex = Dog() alex.init_prop("李杰", "斗牛犬", "黄色", 5) peiQi = Dog() peiQi.init_prop("武大郎", "斗牛犬", "浅灰色", 10)
方法二:使用构造方法
step1. 创建构造方法
def __init__(self, name, breed, color, age, weight): print("__init__执行") print("self:::", id(self)) self.name = name self.breed = breed self.color = color self.age = age self.weight = weight
Step2.初始化对象
peiQi = Dog("武大郎", "斗牛犬", "浅灰色", 10, 70) alex = Dog("李杰", "斗牛犬", "黄色", 5, 60)
创建一个新的对象(即开辟一块独立空间),它是类的实例化结果。 调用类的__init__方法,将新创建的对象作为第一个参数(通常命名为self),并传递其他参数(如果有的话)。 在__init__方法中,对对象进行初始化,可以设置对象的属性和执行其他必要的操作。 返回新创建的对象,使其成为类的实例。
一切皆对象
解释器级别注册好的类
字符串,列表,字典,元组等数据都是属于类 我们所用的数据是一个个具体的实例对象
自定义的对象
自定义对象是可变数据类型,即我们在创建后可以对其进行修改,添加或删除属性和方法,而不会改变类对象的身份
示例对象是一等公民,可以被调用,和变量传递
重温变量传递,和可变类型的知识点
示例1: x = alex print(x.name) ==> 李杰 print(x.age) ==> 5 这里体现的变量传递 alex.age = 10000 print(x.age) ==> 1000 这里体现的是可变数据类型和变量传递
示例2(进阶版): def foo(x): print(x) print(type(x)) x.append(4) b = [1, 2, 3] foo(b) print(b) ==> [1, 2, 3,4]
同理当对象作为一个变量时
def bar(y): print(y, type(y)) y.age = 10000 bar(alex) print(alex.age) ==> 1000
实例对象函数作为函数的实参数
示例(同样也体现的是变量传递): def test(): peiQi = Dog("武大郎", "斗牛犬", "浅灰色", 10, 70) return peiQi pq = test() print(pq.name) print(pq.age)
类对象和类属性
class Car(object): # 类属性 total_cars = 0 def __init__(self, make, model): self.make = make self.model = model # 实例方法 def accelerate(self): print(f"一辆{self.make}的{self.model}正在加速")
如果想改类中的属性
❌错误版本: car1 = Car("Toyota", "Camry") car1.total_cars = 1 print(car1.total_cars) ==> 1 原因(是1不是类属性中的0): 实例对象.属性 = 值 :操作的一定是该实例空间(是一个赋值操作),并且再取值时会先到自己的空间中找total_cars
解决方法
使用类对象
简单来说就是把类名作为对象来用, 调用空间存储的属性和方法
示例: print(Car.total_cars) ==> 0 Car.total_cars = 1 # 在类空间中对类属性做修改 print(Car.total_cars) ==>1
案例1: 每次建立一个新对象时类属性的total_cars的数量加一
方法1: car1 = Car("Toyota", "Camry") Car.total_cars = Car.total_cars + 1 car2 = Car("Honda", "Accord") Car.total_cars = Car.total_cars + 1 print(Car.total_cars) 解释: 每次创建新对象时,都会使用类对象对total_cars做自加1的操作
方法2(进阶方法): 在方法一种好一看到有重复的代码(Car.total_cars = Car.total_cars + 1)所以直接将它提到类中 class Car(object): # 类属性 total_cars = 0 def __init__(self, make, model): self.make = make self.model = model Car.total_cars += 1 解释:每初始化一个新对象都会进行自➕1 操作