xieqingrui-pythonday08

本文详细介绍了面向对象编程的核心概念,包括面向对象与面向过程的区别,类与对象的定义,以及如何通过`__init__`构造函数初始化对象。还讨论了`__str__`方法用于对象的字符串表示。此外,文章强调了面向对象的封装特性,通过私有属性和私有函数展示了如何保护类的内部状态。最后,提到了面向对象的三大特性:封装、继承和多态。
摘要由CSDN通过智能技术生成

面向对象vs面向过程

面向对象: 把事情交给对象去处理
v面向过程: 一步一步完成

类和对象

对象:用来描述客观事物的一个实体,由一组属性和方法构成
类: 是抽象的概念,仅仅是模板

类是对象的模板, 对象是类的具体实例

类来创建对象被称为实例化。

class 类名():
    # 属性

    # 函数, 但是第一个参数必须是self
    def show(self):
        pass

举个栗子

# class 类名():
#     # 属性
#
#     # 函数, 但是第一个参数必须是self
#     def show(self):
#       pass
# 定义类
class Dog():
    def __init__(self):
        self.name = None
        self.color = None
    def show(self):
        print(f"狗狗的名字是{ self.name}, 颜色是{self.color}")
    def eat(self):
        print(f"狗狗{self.name}吃的嘎嘎香")
# 调用类
# 对象名 = 类名()
# 调用函数  对象名.函数名
dog1 = Dog()
# 属性赋值
dog1.name = "豆豆"
dog1.color = "白色"
dog1.show()
dog1.eat()

self 是什么

哪个对象在调用, self就是谁

class Dog():
    def __init__(self):
        self.name = None
        self.color = None
    def show(self):
        print(f"狗狗的名字是{ self.name}, 颜色是{self.color}, self的地址={id(self)}")
dog1 = Dog()
print("id(dog1) = ", id(dog1))
dog1.name = "豆豆"
dog1.color = "白色"
dog1.show()

dog2 = Dog()
print("id(dog2) = ", id(dog2))
dog2.name = "花花"
dog2.color = "白色"
dog2.show()

__init__函数

也叫做构造函数, __函数名__是具有特殊含义的函数, 也叫魔法方法
__init__函数作用是初始化对象的属性, 在类被实例化时会自动调用

def __init__(self):
   print("__init__被调用")
   self.name = None
   self.color = None

创建对象的同时进行初始化

class Dog():
    def __init__(self, name, color, age=0):
        print("__init__被调用")
        self.name = name
        self.color = color
        self.age = age
    def show(self):
        print(f"狗狗的名字是{ self.name}, 颜色是{self.color}, 年龄{self.age}")
d1 = Dog("豆豆","白色")
d1.show()
d2 = Dog("花花","白色", 6)
d2.show()


__str__函数

class Dog():
    def __init__(self, name, color, age=0):
        self.name = name
        self.color = color
        self.age = age
    def __str__(self):
        return f"狗狗的名字是{ self.name}, 颜色是{self.color}, 年龄{self.age}"

d1 = Dog("豆豆","白色")
print(d1)
d2 = Dog("花花","白色", 6)
print(d2)

面向对象三大特性: 封装/继承/多态

私有属性—封装

class Person():
   def __init__(self, name, age):
       self.name = name
       # 属性私有
       self.__age = age
   def show(self):
       self.__age += 1
       print(f'姓名:{self.name}., 年龄: {self.__age}')
   ## 标准的属性访问方法
   def getAge(self):
       return self.__age
   ## 标准的修改方法
   def setAge(self, age):
       self.__age = age
p1 = Person("Eric", 18)
print(p1.name)
p1.setAge(30)
# 私有属性封装, 我们有的时候希望某些属性直供类内部使用, 不希望外部访问
# print(p1.__age) # AttributeError: 'Person' object has no attribute '__age'
p1.show()
print(p1.getAge())

私有函数—封装

class Person():
   def __init__(self, name, age):
       self.name = name
       # 属性私有
       self.__age = age
   def show(self):
       self.__age += 1
       print(f'姓名:{self.name}., 年龄: {self.__age}')
       print(f'password = {self.__genPassword()}')
   ## 标准的属性访问方法
   def getAge(self):
       return self.__age
   ## 标准的修改方法
   def setAge(self, age):
       self.__age = age
   def __genPassword(self):
       return "123456"
p1 = Person("Eric", 18)
print(p1.name)
p1.setAge(30)
# 私有属性封装, 我们有的时候希望某些属性直供类内部使用, 不希望外部访问
# print(p1.__age) # AttributeError: 'Person' object has no attribute '__age'
p1.show()
# p1.__genPassword() 访问不到
print(p1.getAge())
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值