首页 > 编程语言 >人工智能学习(一)之python入门

人工智能学习(一)之python入门

时间:2025-01-22 22:00:02浏览次数:3  
标签:__ 入门 python self 人工智能 print age def name

一、引言

在当今的软件开发领域,面向对象编程(Object-Oriented Programming,OOP)已经成为一种主流的编程范式。Python 作为一门功能强大且简洁易读的编程语言,对面向对象编程提供了非常完善的支持。无论是开发大型项目、构建数据科学应用,还是进行自动化脚本编写,理解和掌握 Python 面向对象编程都能让你更高效地完成任务。本文将带你快速入门 Python 面向对象编程,通过清晰的概念解释、丰富的代码示例,帮助你建立起扎实的面向对象编程基础。

二、面向对象编程基础概念

(一)类(Class)

类是面向对象编程的核心概念之一,它是一种抽象的数据类型,就像是一个模板,用于定义具有相同属性和方法的对象的集合。例如,我们可以定义一个 “Person” 类,用来描述人类的一些通用特征。

class Person:

def __init__(self, name, age):

self.name = name

self.age = age

在这个例子中,Person就是一个类。__init__方法是类的构造函数,当我们创建一个新的Person对象时,这个方法会被自动调用。self参数是一个指向对象本身的引用,通过它我们可以访问对象的属性和方法。name和age是Person类的属性,它们在创建对象时被初始化。

(二)对象(Object)

对象是类的实例化。一旦我们定义了一个类,就可以根据这个类创建多个对象,每个对象都拥有类中定义的属性和方法。例如:

person1 = Person("Alice", 25)

person2 = Person("Bob", 30)

这里,person1和person2就是Person类的两个对象,它们分别具有不同的name和age属性值。

(三)属性(Attribute)

属性是对象所具有的特征或数据。在上面的Person类中,name和age就是属性。我们可以通过对象来访问这些属性:

print(person1.name)

print(person2.age)

输出结果将分别是 “Alice” 和 30。

(四)方法(Method)

方法是类中定义的函数,它用于描述对象的行为。方法与普通函数的区别在于,方法的第一个参数必须是self,通过self可以访问对象的属性和其他方法。例如,我们可以在Person类中添加一个方法来打印个人信息:

class Person:

def __init__(self, name, age):

self.name = name

self.age = age

def print_info(self):

print(f"Name: {self.name}, Age: {self.age}")

person1 = Person("Alice", 25)

person1.print_info()

这段代码会输出 “Name: Alice, Age: 25”。

三、类的定义与使用细节

(一)访问修饰符

在 Python 中,并没有像其他语言(如 Java)那样严格的访问修饰符。但是,通过约定俗成的方式,我们可以模拟类似的效果。

公有属性和方法:在 Python 中,所有不以双下划线开头的属性和方法都是公有的,可以在类的外部直接访问。例如:

class MyClass:

def __init__(self):

self.public_attr = 10

def public_method(self):

return "This is a public method"

obj = MyClass()

print(obj.public_attr)

print(obj.public_method())

私有属性和方法:以双下划线开头的属性和方法被视为私有,在类的外部不能直接访问。例如:

class MyClass:

def __init__(self):

self.__private_attr = 20

def __private_method(self):

return "This is a private method"

obj = MyClass()

# 以下代码会报错

# print(obj.__private_attr)

# print(obj.__private_method())

但是,实际上 Python 并没有真正的私有机制,通过 “_类名__属性名” 的方式还是可以在外部访问私有属性和方法,但强烈不建议这样做,因为这违反了代码的封装原则。

(二)类变量和实例变量

类变量:类变量是在类中定义的变量,它被所有的实例对象共享。类变量在类的定义体中声明,并且在所有方法之外。例如:

class Dog:

species = "Canis familiaris"

def __init__(self, name):

self.name = name

dog1 = Dog("Buddy")

dog2 = Dog("Max")

print(dog1.species)

print(dog2.species)

print(Dog.species)

在这个例子中,species是一个类变量,所有的Dog对象都共享这个变量。我们可以通过对象或类名来访问类变量。

实例变量:实例变量是在构造函数__init__中定义的变量,每个实例对象都有自己独立的实例变量副本。例如,上面代码中的name就是实例变量,每个Dog对象都有自己不同的name值。

四、面向对象编程的特性

(一)封装(Encapsulation)

封装是将数据和操作数据的方法绑定在一起,对外部隐藏对象的内部实现细节。通过封装,我们可以保护对象的属性不被随意修改,同时提供统一的接口来访问和操作这些属性。例如,我们可以在Person类中添加一些方法来修改age属性,同时在方法内部进行一些合法性检查:

class Person:

def __init__(self, name, age):

self.name = name

self.__age = age

def get_age(self):

return self.__age

def set_age(self, new_age):

if new_age >= 0:

self.__age = new_age

else:

print("Age cannot be negative")

person1 = Person("Alice", 25)

print(person1.get_age())

person1.set_age(26)

print(person1.get_age())

person1.set_age(-1)

在这个例子中,__age是一个私有属性,外部不能直接访问和修改。通过get_age和set_age方法,我们可以在保证数据合法性的前提下访问和修改age属性。

(二)继承(Inheritance)

继承允许我们创建一个新的类(子类),它从一个已有的类(父类)中继承属性和方法。子类可以扩展或修改父类的功能,从而实现代码的复用和层次化的设计。例如,我们定义一个Student类,它继承自Person类:

class Person:

def __init__(self, name, age):

self.name = name

self.age = age

def print_info(self):

print(f"Name: {self.name}, Age: {self.age}")

class Student(Person):

def __init__(self, name, age, student_id):

super().__init__(name, age)

self.student_id = student_id

def print_student_info(self):

self.print_info()

print(f"Student ID: {self.student_id}")

student1 = Student("Charlie", 20, "12345")

student1.print_student_info()

在这个例子中,Student类继承了Person类的__init__和print_info方法。通过super().__init__(name, age)调用父类的构造函数来初始化从父类继承的属性。Student类还添加了自己特有的属性student_id和方法print_student_info。

(三)多态(Polymorphism)

多态是指同一个方法在不同的类中可以有不同的实现。这使得我们可以用统一的方式处理不同类型的对象。例如,我们定义两个类Circle和Rectangle,它们都有一个计算面积的方法area:

import math

class Circle:

def __init__(self, radius):

self.radius = radius

def area(self):

return math.pi * self.radius ** 2

class Rectangle:

def __init__(self, width, height):

self.width = width

self.height = height

def area(self):

return self.width * self.height

shapes = [Circle(5), Rectangle(4, 6)]

for shape in shapes:

print(shape.area())

在这个例子中,Circle和Rectangle类都有自己的area方法实现。通过将不同类型的对象放在一个列表中,并调用相同的area方法,我们可以根据对象的实际类型来调用相应的方法实现,这就是多态的体现。

五、特殊方法(Magic Methods)

Python 中有一些特殊的方法,它们以双下划线开头和结尾,这些方法在特定的情况下会被自动调用。

(一)__init__方法

我们已经在前面的例子中多次使用过__init__方法,它是类的构造函数,在创建对象时被自动调用,用于初始化对象的属性。

(二)__str__方法

__str__方法用于返回对象的字符串表示形式。当我们使用print函数打印对象时,会调用对象的__str__方法。例如:

class Point:

def __init__(self, x, y):

self.x = x

self.y = y

def __str__(self):

return f"({self.x}, {self.y})"

point = Point(3, 4)

print(point)

这段代码会输出 “(3, 4)”。

(三)__repr__方法

__repr__方法也用于返回对象的字符串表示形式,它更侧重于开发人员调试和记录信息。通常情况下,__repr__方法返回的字符串应该能够用来重新创建对象。例如:

class Point:

def __init__(self, x, y):

self.x = x

self.y = y

def __repr__(self):

return f"Point({self.x}, {self.y})"

point = Point(3, 4)

print(repr(point))

这段代码会输出 “Point (3, 4)”。

(四)算术运算相关的特殊方法

  1. __add__方法用于实现对象的加法操作。例如,我们定义一个Vector类来表示二维向量,并实现向量的加法:
class Vector:

def __init__(self, x, y):

self.x = x

self.y = y

def __add__(self, other):

return Vector(self.x + other.x, self.y + other.y)

def __repr__(self):

return f"Vector({self.x}, {self.y})"

v1 = Vector(1, 2)

v2 = Vector(3, 4)

v3 = v1 + v2

print(v3)

这段代码会输出 “Vector (4, 6)”。

2. 类似的,还有__sub__(减法)、__mul__(乘法)、__truediv__(除法)等方法,可以根据需要进行实现。

六、类的高级特性

(一)多重继承

在 Python 中,一个类可以继承自多个父类,这就是多重继承。例如:

class A:

def method_a(self):

return "Method A"

class B:

def method_b(self):

return "Method B"

class C(A, B):

pass

c = C()

print(c.method_a())

print(c.method_b())

在这个例子中,C类继承了A类和B类的方法。通过多重继承,C类可以同时拥有多个父类的功能。但是,多重继承也可能会导致一些复杂的问题,如菱形继承问题(多个父类继承自同一个基类),在使用时需要谨慎考虑。

(二)抽象基类和抽象方法

抽象基类(Abstract Base Class,ABC)是一种不能被实例化的类,它的主要作用是为子类提供一个公共的接口定义。抽象方法是在抽象基类中定义的没有实现的方法,子类必须实现这些抽象方法。在 Python 中,我们可以使用abc模块来定义抽象基类和抽象方法。例如:

from abc import ABC, abstractmethod

class Shape(ABC):

@abstractmethod

def area(self):

pass

class Circle(Shape):

def __init__(self, radius):

self.radius = radius

def area(self):

import math

return math.pi * self.radius ** 2

class Rectangle(Shape):

def __init__(self, width, height):

self.width = width

self.height = height

def area(self):

return self.width * self.height

# 以下代码会报错,因为Shape是抽象基类,不能被实例化

# shape = Shape()

circle = Circle(5)

print(circle.area())

在这个例子中,Shape是一个抽象基类,它定义了一个抽象方法area。Circle和Rectangle类继承自Shape类,并实现了area方法。

(三)元类(Metaclass)

元类是一种定义类的类,它允许我们在创建类时动态地修改类的定义。元类是 Python 中非常高级的特性,通常用于实现一些复杂的框架和库。例如,我们可以定义一个简单的元类来自动为类的所有方法添加日志记录功能:

class LoggingMeta(type):

def __new__(cls, name, bases, attrs):

for attr_name, attr_value in attrs.items():

if callable(attr_value):

def new_method(*args, **kwargs):

print(f"Calling {attr_name} method")

return attr_value(*args, **kwargs)

attrs[attr_name] = new_method

return super().__new__(cls, name, bases, attrs)

class MyClass(metaclass=LoggingMeta):

def my_method(self):

print("This is my method")

obj = MyClass()

obj.my_method()

在这个例子中,LoggingMeta是一个元类,当创建MyClass类时,元类的__new__方法会被调用。在__new__方法中,我们遍历类的所有属性,如果属性是一个方法,就创建一个新的方法,在新方法中添加日志记录功能,然后将新方法替换原来的方法。

七、面向对象编程的应用场景

(一)Web 开发

在 Python 的 Web 开发框架中,如 Django 和 Flask,面向对象编程被广泛应用。例如,在 Django 中,模型(Model)就是使用类来定义的,每个模型类对应数据库中的一个表,通过类的属性来表示表中的字段,通过类的方法来实现对数据的操作。这样的设计使得代码结构清晰,易于维护和扩展。

(二)游戏开发

在游戏开发中,面向对象编程可以用来管理游戏中的各种对象,如角色、道具、场景等。每个对象都可以定义为一个类,通过类的属性和方法来描述对象的特征和行为。例如,一个角色类可以包含生命值、攻击力等属性,以及移动、攻击等方法。

(三)数据科学和机器学习

在数据科学和机器学习领域,面向对象编程也有很多应用。例如,在 Scikit-learn 库中,各种机器学习模型都被实现为类,如LinearRegression类用于线性回归模型,RandomForestClassifier类用于随机森林分类模型。通过这些类,我们可以方便地创建模型对象,调用模型的方法进行训练、预测等操作。

八、总结与展望

通过本文的学习,我们对 Python 面向对象编程有了一个全面的了解,从基础的类和对象概念,到面向对象编程的特性,再到类的高级特性和应用场景。面向对象编程为我们提供了一种强大的编程范式,它使得代码更易于理解、维护和扩展。

在未来的学习和实践中,你可以进一步深入研究面向对象编程的高级主题,如设计模式在 Python 中的应用、使用元类进行更复杂的类定制等。同时,将面向对象编程与其他 Python 技术相结合,如文件操作、网络编程等,开发出更加复杂和功能强大的应用程序。希望本文能为你开启 Python 面向对象编程的大门,让你在编程的世界中自由翱翔。

标签:__,入门,python,self,人工智能,print,age,def,name
From: https://blog.csdn.net/dengdeng333/article/details/145307067

相关文章

  • STM32单片机快速入门——ADC篇
    目录一.ADC简介二.ADC组成2.1逐次逼近型ADC结构2.2ADC模块总体结构三.ADC配置3.1时钟源的配置3.2ADC触发源选择3.2.1软件触发3.2.2定时器定时触发3.3.3外部中断触发3.3ADC转化模式3.4ADC对齐模式3.5ADC校准3.6 ADC配置流程四.ADC代码示例4.1ADC......
  • JS逆向和前端加密暴力破解(小白无痛学习),黑客技术零基础入门到精通教程!
    网站运行的时间轴url–>加载html–>加载js–>运行js初始化–>用户触发某个事件–调用了某段js–>明文数据–>加密函数–>加密后的数据–>send(给服务器发信息{XHR–SEND})-->接收到服务器数据–>解密函数–>刷新函数–>刷新网页渲染浏览器的调试功能调试时使用最多的功......
  • 【每天学会一个渗透测试工具】SQLmap安装教程及使用,黑客技术零基础入门到精通教程!
    01、SQLmap简介Sqlmap是一款开源的渗透测试工具......
  • python生成随机字符串
    在Python中,可以使用random、secrets或uuid模块来生成随机字符串。以下是几种常见的方法:1.使用random生成随机字符串importrandomimportstringdefgenerate_random_string(length=10):characters=string.ascii_letters+string.digits#包含大小......
  • python中很常用的10个内置函数整理(初学必备)
    对于初学Python的小伙伴们来说,掌握内置常用函数是学好Python的重要一步。这些函数不仅能让你的代码更加简洁,还可以提高编程效率。本笔记将为大家整理62个Python中最常用的内置函数,并且给出了一些简单的示例,帮助大家更好地理解和运用这些函数。这些内置函数是Pyth......
  • Linux基础05-指令篇之权限管理【入门级】
    Linux基础主要内容权限管理通配符权限管理指令修改文件/目录的拥有者或者组执行权限:root语法:chown[选项]...[所有者][:[组名]]文件或者目录路径...选项:-c:显示更改部分的信息-f:忽略错误信息-h:修复符号链接==-R:==处理指定目录以及其目录中的所有文件-v:显......
  • Linux基础07-指令篇之vim编辑器【入门级】
    Linux基础Vim编辑器Vim定义本质上我们用Linux自带的编辑器叫做Vi编辑器(类似于记事本,一般用来做文件的编辑),名字取自Visual,它是一个全屏幕文本编辑器(程序)。在Linux系统中Vi是最常用的编辑程序,它的文本编辑功能十分强大,但是使用起来比较复杂。Vim是Vi的增强版,所以Vi的功能Vi......
  • Linux基础06-指令篇之打包压缩解压缩【入门级】
    Linux基础内容提要压缩、打包、解压缩权限说明权限的类型权限的数值普通文件目录/文件夹r:可读4cat,less,more,head,tail等lsw:可写2>(覆盖写入),>>(追加写入),touch,rmmkdir,rmdir,mv(重命名)x:可执行1./文件名(可执行文件)cd,cp,mv(移动)-:无权限0无操作无操作压缩与解压缩压......
  • python如何检查列表元素是否为零
    python检查列表元素是否为零的方法:1、使用for循环遍历列表中的每一个元素2、用if语句判断该元素是否为零;如果是则输出这个列表元素的下标完整代码如下:执行结果如下:......
  • Python 实现 macOS 系统代理的设置
    Python实现macOS系统代理的设置设置SOCKS代理在macOS系统中,可以通过networksetup工具来设置SOCKS代理。以下是Python实现的方法:使用networksetup设置SOCKS代理importsubprocessdefset_socks_proxy(server,port):"""设置macOS系统的SOCKS......