zl程序教程

您现在的位置是:首页 >  Python

当前栏目

Python 面向对象编程(OOP)—— 类

2023-04-18 14:55:52 时间

Python终于学习到面向对象的编程思想,希望这对我以后学习java 有更好的铺垫

目录

一、什么是“类”(内容来自Python 趣味编程入门)

1.1、x = Myclass()

1.2、x.hello()

1.3、用类实现员工目录

 1.3.1、self

1.3.2、修改"类"的属性

1.4、员工目录(改,记录员工的数量)

总结:

一、什么是“类”(内容来自Python 趣味编程入门)

在面向对象编程中,“类”就像一个函数,尽管普通的函数就可以用于整个程序,在OOP中,我们必须创建包含类中数据的“对象”,然后才能使用

#类定义
class Myclass:

    def hello(self): #这个函数在类中称为方法
        print("Hello,everyone!")

#x即为对象
x = Myclass()

#调用对象为“hello”的方法
x.hello()

#令一个对象
y = Myclass()
y.hello()

这个“类”定义,有点像我们之前做过的函数的定义,忘记函数怎么定义或者其他问题的的小伙伴可以看我的这篇博客

Python中的函数使用

接着上面的,类定义本身并不能做任何事,它是一个模板。在类定义中,我们创建了一个简单函数 "hello()" ——类中的函数都称做 "方法"。(PS:我们在class 后面定义的 Myclass 第一个字母是da大写,其实小写也可以,但是为了了以后方面,这里用大写,以后我们在代码中遇到就可以立刻知道,这个代码创建了一个 "类",而不止是运行了一个普通的函数)

1.1、x = Myclass()

前面说道,我们定义的只是一个模板,我们并没有使用它,在 x = Myclass()这一行中,这是一个类,而不是函数,这里我创建了一个"Myclass"的实例,并将结果放到"x"当中,这个时候,"x"  不再是一个普通变量,而是一个包含类定义的所有变量及函数的"对象"。

1.2、x.hello()

x.hello()这句话中,”x“本身就包含了 "hello()"函数的一个拷贝,x后面加了一个 ".",我们就可以访问它的函数的 方法,后面的"y" 和"x" 之间是一样的道理,不过 "y" 是一个单独的对象,两个对象都是开始时定义的类模板的实例,但是它们独立于内存中,可以用作不同的目的

1.3、用类实现员工目录

上面这个程序,我们定义了x,y这两个实例,但是定义两个相同的实例而不做任何事情是没有任何意义的。下面我就用另一个实例来看看在一个包含变量和可变数据的类,我们用初始化方式,使类的新实例在创建时自动执行:回到前面我们用字典创立员工名单的实例,实例一,这一次为每个员工创建对象,而不用字典这个数据结构试试看看,当我们创建对象时,可以向"__init__"  方法传递实例,设置局部变量

class Employee:
    #这个方法在对象创建时自动执行
    def __init__(self,passed_name,passed_number):

        self.name = passed_name#实例变量,也成属性,员工的姓名

        self.number = passed_number#员工的号码

    def show(self):
        print("Name:",self.name)
        print("Number:",self.number)

first = Employee("Bob",1234)
second = Employee("Gorit",2247)

first.show()
second.show()

运行结果:

 我们创建新的实例时,也就是下面13,14行所代表的,我们在括号里指定的参数自动吸收到 "__init__" 方法中,可以通过"passed_name","passed_number"进行访问

 1.3.1、self

类定义中的 "self" 又是怎么一回事呢?,它用于引用对象自己的变量拷贝。如果我们忽略 "self",Python就会创立一个临时变量用于指定的方法和其他的地方。而"self" 告诉Python,这个变量保存在对象中,并在对象的所有方法里共享。因此后面的"first"还有"second" 对象有自己的"name"和"number"变量(属性),而"second" 对象有这些变量的另一个拷贝。

1.3.2、修改"类"的属性

我们试试将开始的"first" 中的参数改改,就在上面的程序的后面改

 我们就更新了创建实例时设置的值,并再次显示它们

1.4、员工目录(改,记录员工的数量)

class Employee:
    #这里我们的目的时为了跟踪员工的数量而设定的参数
    employee_count = 0
    #这个方法在对象创建时自动执行
    def __init__(self,passed_name,passed_number):
        self.name = passed_name#实例变量,也成属性,员工的姓名
        self.number = passed_number#员工的号码
        Employee.employee_count += 1

    def show(self):
        print("Name:",self.name)
        print("Number:",self.number)

first = Employee("Bob",1234).show()
second = Employee("Gorit",2247).show()
third = Employee("White",2790).show()

print("Number of employees",Employee.employee_count)

这个程序相比上面的程序,多了计数功能,我们虽然可以在主函数中,用一个单独的变量完成这项工作,但为了模块化,我们还是打算在"类"内部完成。

我们一开始创建了"employee_count" 类变量并设置为0,这个值供该例的所有实例共享,然后每个"类"执行 “__init__” "employee_count"递增1,我们在最后一行中使用了"Employee"这个前缀,说明引用的时"类" 变量,不是“__init__”的临时变量,最后我们使用"employee_count" 它不与任何实例绑定,所以加上"Employee"前缀

总结:

第一次接触编程的我时学的html,css,然后是c语言,当时并不知道什么是面向过程,面向对象,今天学了Python,也是我第一次接触面向对象这个程序语言,希望后面学习java的时候,能够使我更快的理解面向对象的程序思想