python基础之面对对象基础(上 )

接触python也有好几年了,一直处于学学忘忘的状态,没有形成具体框架,都是哪里不会问度娘,总这样学觉得不太踏实,还是打好基础心里稳一点。

但是也不是从最基本的安装环境,变量开始写,那种也没有什么技术含量,百度看看就好了。

所以本文合适学过python,但好久没用过的人看。

1.面向对象介绍

概述

  • 面向过程:根据业务逻辑从上到下写代码

  • 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可

  • 面向对象编程:将数据与函数绑定到一起,进行封装,这样能够更快速的开发程序,减少了重复代码的重写过程

面向过程与面向对象对比:

在这里插入图片描述

面向对象分析

  • 面向过程和面向对象都是一种解决实际问题的思路。
  • 洗车第一种方式:强调的是步骤、过程、每一步都是自己亲自去实现的,这种解决问题的思路我们就叫做面向过程
  • 洗车第二种的方式:强调的是洗车店,由洗车店去帮我们洗车,过程不用我们自己去操心,对我们而言,我们并不必亲自实现整个步骤只需要调用洗车店就可以解决问题,这种解决问题的思路就是面向对象。

•面向过程的关注点是怎么做

•面向对象的关注点是谁来做

面向对象与面向对象编程

  • 面向对象:按人们认识客观世界的系统思维方式,采用基于对象(实体) 的概念建立模型,模拟客观世界分析、设 计、实现软件的办法。
  • 面向对象编程(Object Oriented Programming-OOP)是一种解决软件复用的设计和编程方法。这种方法把软件系统中相近相似的操作逻辑和操作 应用数据、状态,以类的形式描述出来,以对象实例的形式在软件系统中复用,以达到提高软件开发效率的作用。

2.类和对象的概念

类和对象

  • 类和对象是面向对象编程中重要的概念
  • 类就是一个模板,模板里可以包含多个函数,函数里实现一些功能
  • 对象则是根据模板创建的实例,通过实例对象可以执行类中的函数

类的组成部分

  • 类(Class)由3个部分构成:

类的名称: 类名

类的属性: 一组数据

类的方法: 允许对进行操作的方法 (行为)

  • 例如:创建一个人类

事物名称(类名):人(Person)

属性:身高(height)、年龄(age)

方法:吃(eat),跑(run)…

类的抽象

具有相同(或者类似)属性和行为的一系列对象的集合都可以抽像出一个类

  • 例1:小明开着他家的宝马去逛街
    小明 ->可以抽象中人类
    宝马 ->可以抽象出车类
  • 例2:抽象坦克大战中的类
    坦克
    类名:Tank
    属性:血量 类型
    方法:发射子弹

    类名: Wall
    属性:血量 类型
    方法:阻挡
    子弹
    类名:Bullet
    属性:杀伤力

3.定义类和对象

定义类

#创建一个类
class Foo(object)
	方法列表

示例:

# 创建一个类 
class Person(object): 
	name = 'xiaohong' 
	age = 18 
	def eat(self): 
		print('吃饭') 
# 创建一个车类 
class Car(object): 
	# 属性 
	colour = 'red' 
	# 方法 
	def run(self): 
	print('车在跑') 

创建对象

  • 格式

    对象名=类名()

  • 示例

    #创建一个Car对象,bmw就是Car的对象,对象可以访问属性,调用方法。
    bmw = Car() # 创建对象
    bmw.run() # 调用run方法
    print(bmw.colour)  # 访问类属性
    

总结一下

1.定义类

使用class关键字定义一个类,并在类中定义属性和方法。

class MyClass:
    def __init__(self, arg1, arg2):
        self.arg1 = arg1
        self.arg2 = arg2

    def my_method(self):
        print("This is my method.")

在上面的示例中,MyClass是一个类,具有arg1和arg2两个属性,以及my_method方法。

2.实例化对象

使用类名后面加括号的形式,调用类的构造方法来创建对象。

my_object = MyClass("value1", "value2")

在上面的示例中,通过调用MyClass的构造方法,创建了一个名为my_object的对象。构造方法__init__用于初始化对象的属性。

3.访问属性和调用方法

通过对象名后面加点运算符(.)来访问对象的属性和调用对象的方法。

print(my_object.arg1)  # 访问对象的属性
my_object.my_method()  # 调用对象的方法

在上面的示例中,通过my_object.arg1来访问对象的属性arg1,并使用my_object.my_method()来调用对象的方法my_method()

4.实例方法与属性

实例方法和实例属性是与类的实例(对象)相关联的方法和属性。它们是在类中定义的,但只能通过类的实例来访问和使用。

实例方法

实例方法是在类中定义的函数,用于操作类的实例,并可以访问和修改实例的属性。实例方法的第一个参数通常是self,表示对当前对象的引用。

下面是一个示例,展示了如何定义和使用实例方法:

class MyClass:
    def __init__(self, value):
        self.value = value

    def my_method(self):
        print("The value is:", self.value)

    def update_value(self, new_value):
        self.value = new_value

# 创建对象
my_object = MyClass("Hello")

# 调用实例方法
my_object.my_method()  # 输出:The value is: Hello

# 修改属性值
my_object.update_value("World")

# 再次调用实例方法
my_object.my_method()  # 输出:The value is: World

在上面的示例中,MyClass类定义了一个实例方法my_method,用于打印实例的value属性。另外,还定义了一个实例方法update_value,用于修改实例的value属性的值。

通过实例化类,可以创建对象my_object,然后通过my_object.my_method()来调用实例方法,输出实例的value属性的值。通过调用my_object.update_value(new_value)来修改实例的value属性的值。

实例属性

实例属性是与类的实例相关联的数据。实例属性存储在对象中,并可以在实例方法中访问和修改。实例属性可以在类的构造方法中初始化,或者在其他实例方法中创建和修改。

下面是一个示例,演示了如何定义和使用实例属性:

class Person:
    def __init__(self, name, age):
        self.name = name  # 定义name属性
        self.age = age  # 定义age属性

    def introduce(self):
        print("Hello, my name is", self.name)
        print("I am", self.age, "years old.")

# 创建对象
person = Person("Alice", 25)

# 访问实例属性
print(person.name)  # 输出:Alice
print(person.age)  # 输出:25

# 调用实例方法
person.introduce()  # 输出:Hello, my name is Alice
                    #      I am 25 years old.

在上面的示例中,Person类定义了两个实例属性nameage,它们分别存储人物的姓名和年龄。在类的构造方法__init__中初始化这些属性。实例方法introduce用于打印人物的姓名和年龄。

通过对象访问实例属性时,可以使用点运算符(.)来获取属性的值,如person.nameperson.age。通过调用对象的实例方法person.introduce(),可以输出人物的信息。

  • **注意:**需要注意的是,实例方法和实例属性都是与类的实例(对象)相关联的。每个对象都有自己独立的实例属性值,并且可以通过实例方法来访问和操作这些属性。不同对象之间的实例属性值可以不同。

5.__init__方法

(1)分析问题

创建一个Animal类,并实例化一个dog对象和cat对象。

class Animal(object):
    def eat(self):
        print('吃饭')
dog = Animal()  # 创建一个对象
dog.colour = 'red'  # 添加属性
dog.name = '旺财'  # 添加属性
print(dog.name)

cat = Animal() # 创建一个对象
cat.colour = 'black' # 添加属性
cat.name = '小花' # 添加属性
print(cat.name)

每创建一个对象都要添加属性,试想如果再创建一个对象的话,肯定也需要进行添加属性,显然这样做很费事,那么有没有办法能够在创建对象的时候,就顺便对象的属性给设置呢?

(2)__init__(self) 方法

__init__(self)__方法,初始化方法,实例化对象的时候自动调用,完成一些初始化设置。

# 创建一个动物类
class Animal(object):   
# 创建一个初始化方法    
	def __init__(self):       
        self.name = '旺财'       
        self.colour = '黄色'
dog = Animal()  # 实例化对象
print(dog.name)  # 访问属性
print(dog.colour) # 访问colour属性

(3)__init__(self) 传参

如果init方法里面的属性固定了,每个类创建出来的对象属性都一样,这个时候我们是不是考虑将属性当参数在实例化对象的时候传进去,让类更通用?

# 创建一个动物类
class Animal(object):    # 创建一个初始化方法 
    def __init__(self,name,colour):        
        self.name = name        
        self.colour = colour
dog = Animal('旺财''white')  # 实例化对象
print(dog.name)  # 访问属性
print(dog.colour) # 访问colour属性

dog = Animal('小花''black')  # 实例化对象
print(dog.name)  # 访问属性
print(dog.colour) # 访问colour属性

注意事项:

  1. __init__ 方法是在类实例化时自动调用的,而不是在定义类时调用。当创建类的对象时,Python会自动调用该类的 __init__ 方法来进行初始化操作。
  2. __init__ 方法的第一个参数通常命名为 self,它表示对当前对象的引用。在方法体内,可以使用 self 来访问和操作对象的属性。
  3. __init__ 方法可以接受任意数量的参数,包括位置参数和关键字参数。参数的数量和顺序必须与 __init__ 方法的定义一致。
  4. __init__ 方法中,可以使用传递给构造方法的参数来初始化对象的属性。通过将参数赋值给对象的属性,可以在对象创建时设置初始值。
  5. __init__ 方法可以执行其他必要的初始化操作,如设置默认值、调用其他方法、进行异常处理等。
  6. __init__ 方法中,可以使用 self 来访问其他实例方法、类方法和静态方法,以及类的属性和其他实例的属性。
  7. __init__ 方法不需要显式返回任何值。它的主要目的是进行对象的初始化,而不是返回结果。
  8. 如果类没有定义 __init__ 方法,Python会自动调用默认的空 __init__ 方法。这意味着对象仍然会被创建,但没有进行任何特定的初始化操作。

6.魔法方法

概述

在python中,有一些内置好的特定的方法,方法名是“xxx”,在进行特定的操作时会自动被调用,这些方法称之为魔法方法。

下面介绍几种常见的魔法方法:

  • __init__方法:初始化一个类,在创建实例对象为其赋值时使用。

  • __str__方法:在将对象转换成字符串 str(对象) 测试的时候,打印对象的信息。

  • __new__方法:创建并返回一个实例对象,调用了一次,就会得到一个对象。

  • __class__方法:获得已知对象的类 ( 对象.class)。

  • __del__方法:对象在程序运行结束后进行对象销毁的时候调用这个方法,来释放资源。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值