python3类和对象的概念

admin 阅读:78 2024-02-29

在Python中,类是一种自定义数据类型,用于封装数据和方法。类定义了一个对象的属性和方法,这些属性和方法可以被对象调用。对象是类的实例,具有类定义的属性和方法。

类可以看作是一个模板或蓝图,用于创建对象。对象是类的实例,具有类定义的属性和方法。类定义了对象的属性和方法,而对象则使用这些属性和方法来执行特定的任务。

类是抽象的模板,我们先定义类,然后我们就可以用类这个模板创建出很多对象,比如我们定义一个 Human 类, 然后用 Human 类创建出很多具体的 Human(比如如花,星星,张三)等等。

无论是对于如花,星星还是张三这些具体的人,他们都有一些共同属性(变量)和行为(函数), 我们可以把这些属性和行为定义在他们所属的 Human 类中。

类和对象的定义

Python 使用关键字 class 类名,或者 class 类名() 来定义一个类。


class Human:
    pass

class Human2():
    pass

print(type(Human))   # <class 'type'>
print(type(Human2))  # <class 'type'>


我们定义好了 Human 类,就可以根据 Human 类创建出对象,创建对象是通过类名和小括号来实现。


class Human():
    pass

luren_a = Human()     # 用 Human 类定义一个具体的对象 luren_a
print(type(luren_a))  # <class '__main__.Human'>


我们可以用 Human 类定义多个对象,注意每个对象都是独立的个体。


class Human():
    pass

luren_a = Human()  # 用 Human 类定义一个具体的对象 luren_a
luren_b = Human()  # 用 Human 类定义一个具体的对象 luren_b
print(id(luren_a)) # 139834494871984
print(id(luren_b)) # 139834494206248


我们可以给 Human 类添加变量(属性),该变量叫做类的成员变量,并且可以通过对象访问到成员变量。


class Human():
    name = "zhangsan"

luren_a = Human()
print(luren_a.name)  # zhangsan 通过对象访问对象的属性


我们也可以给 Human 类添加函数(方法),该函数叫做类的成员函数, 但要注意成员函数必须至少有一个参数(我们一般给该参数起名为 self,当然也可以是其它名字), 该参数用来接收调用者本身,调用者本身是 Human 类的一个对象。


class Human():
    name = "zhangsan"

    def getname(self):
        print(id(self))  # self 即是 调用者本身
        print(self.name)

luren_a = Human()
print(id(luren_a)) # 140479241146888

# 通过 luren_a 对象调用成员函数时,Python 解释器会自动把 luren_a 对象本身作为 getname 的第一个实参。
luren_a.getname() # 140479241146888 zhangsan


Python 的类和对象相对其它语言增加的额外特性

Python 允许我们动态的给一个对象绑定属性,比如给我们的 Human 类的某个对象动态绑定一个 age 属性。


class Human():
    name = "zhangsan"

luren_a = Human()
luren_a.age = 18

print(luren_a.age) # 18


Python 还允许我们动态的给一个对象绑定函数,比如给我们的 Human 类的某个对象动态绑定一个 speak 函数。


class Human():
    name = "zhangsan"

def speak():
    print("大家好,我是 zhangsan")

luren_a = Human()
luren_a.speak = speak

luren_a.speak() # 大家好,我是 zhangsan


我们用 Human 类定义好对象后,当给某个对象动态的添加属性和方法时,这些属性和方法并不作用于其它对象。


class Human():
    name = "zhangsan"

def speak():
    print("大家好,我是 zhangsan")

luren_a = Human()
luren_b = Human()

luren_a.age = 18
luren_a.speak = speak

print(luren_a.age)   # 18
luren_a.speak()      # 大家好,我是 zhangsan

print(luren_b.age)   # 错误
luren_b.speak()      # 错误

如果我们想让动态绑定的属性和方法作用于所有对象,可以直接对类进行动态绑定,比如直接对 Human 类进行动态绑定。

class Human():
    name = "zhangsan"

def speak(self):
    print("大家好,我是" + self.name)

luren_a = Human()
luren_b = Human()

Human.age = 18
Human.speak = speak

print(luren_a.age)   # 18
luren_a.speak()      # 大家好,我是zhangsan

print(luren_b.age)   # 18
luren_b.speak()      # 大家好,我是zhangsan

本节重要知识点

理解什么是面向对象

弄明白类和对象的区别

知道 Python 的类和对象中增加的额外特性。

声明

1、部分文章来源于网络,仅作为参考。
2、如果网站中图片和文字侵犯了您的版权,请联系1943759704@qq.com处理!