加入收藏 | 设为首页 | 会员中心 | 我要投稿 汽车网 (https://www.0577qiche.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

Python入门示例系列21 面向对象初级

发布时间:2023-04-12 14:20:16 所属栏目:教程 来源:
导读:Python 的面向对象的语法格式与其他语言(C++,Java,C# 等)有显著区别,概念类似但语法格式相差很远。

类Class: 描述具有相同属性和方法的对象的集合,采用变量存储数据域,定义方法执行动作行为。

创建类
Python 的面向对象的语法格式与其他语言(C++,Java,C# 等)有显著区别,概念类似但语法格式相差很远。

类Class: 描述具有相同属性和方法的对象的集合,采用变量存储数据域,定义方法执行动作行为。

创建类
使用 class 语句来创建一个新类,class 之后为类的名称并以冒号结尾:

class ClassName:  # 类名称
   '类的帮助信息'   # 类文档字符串,类的说明信息、帮助信息(可以省略)
   class_suite    # 类体
 
类的帮助信息(类文档字符串)可以通过   ClassName.__doc__   查看。

class_suite 由类成员,方法,数据属性组成。

class ClassName:
   '类的帮助信息'   # 类文档字符串
   pass    # 类体
 
print(ClassName.__doc__)
结果

类的帮助信息
 
以下是一个简单的 Python 类的例子:

class Employee:
    '所有员工的基类'
    empCount = 0  # 类变量,它的值将在这个类的所有实例之间共享。可以在内部类或外部类使用 Employee.empCount 访问
 
    def __init__(self, name, salary):  # 类的构造函数或初始化方法,当创建了这个类的实例时就会调用该方法
        self.name = name  # name  实例变量
        self.salary = salary  # salary 实例变量
        Employee.empCount += 1
 
    def displayCount(self):  # 实例方法
        print("Total Employee %d" % Employee.empCount)
    def displayEmployee(self):  # 实例方法
        print("Name: ", self.name, ", Salary:", self.salary)
a = Employee('Sam',123)
a.displayEmployee()
a.displayCount()
b = Employee('John',222)
b.displayEmployee()
b.displayCount()
结果

Name:  Sam , Salary: 123
Total Employee 1
Name:  John , Salary: 222
Total Employee 2

empCount 变量是一个类变量,它的值将在这个类的所有实例之间共享。可以在内部类或外部类使用 Employee.empCount 访问。

第一种方法 __init__() 方法是一种特殊的方法,被称为类的构造函数或初始化方法,当创建了这个类的实例时就会调用该方法。

self 代表类的实例,self 在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数。

self 代表类的实例,而非类
实例方法必须有一个额外的第一个参数名称, 按照惯例它的名称是 self。

class Test:
    def prt(self):
        print(self)
        print(self.__class__)
 
t = test()
t.prt()
以上实例执行结果为:
<__main__.Test object at 0x0124FDF0>
<class '__main__.Test'>
从执行结果可以很明显的看出,self 代表的是类的实例,代表当前对象的地址,而 self.__class__ 则指向类。

self 不是 python 关键字,我们把他换成 其他字符 也是可以正常执行的:

class Test:
    def prt(xxx):
        print(xxx)
        print(xxx.__class__)
 
t = test()
t.prt()
以上实例执行结果为:
<__main__.Test object at 0x0124FDF0>
<class '__main__.Test'>
创建实例对象
其他编程语言(C++,Java, C#)中,实例化类一般用关键字 new,但是在 Python 中并没有这个关键字,类的实例化类似函数调用方式。

以下使用类的名称 Employee 来实例化,并通过 __init__ 方法接收参数。

"创建 Employee 类的第一个对象"
emp1 = Employee("Zara", 2000)
"创建 Employee 类的第二个对象"
emp2 = Employee("Manni", 5000)
 
访问属性
可以使用点号 .  来访问对象的属性。使用如下类的名称访问类变量:

Employee.empCount  # 类变量
emp1.displayEmployee() # 实例方法
emp2.displayEmployee()  # 实例方法
 
完整示例:

class Employee:
   '所有员工的基类'
   empCount = 0
 
   def __init__(self, name, salary):
      self.name = name
      self.salary = salary
      Employee.empCount += 1
   
   def displayCount(self):
     print("Total Employee %d" % Employee.empCount)
 
   def displayEmployee(self):
      print("Name : ", self.name,  ", Salary: ", self.salary)
 
"创建 Employee 类的第一个对象"
emp1 = Employee("Zara", 2000)
"创建 Employee 类的第二个对象"
emp2 = Employee("Manni", 5000)
emp1.displayEmployee()
emp2.displayEmployee()
print("Total Employee %d" % Employee.empCount)

执行以上代码输出结果如下:

Name :  Zara ,Salary:  2000
Name :  Manni ,Salary:  5000
Total Employee 2
 
可以添加,删除,修改类的属性,如下所示:

emp1.age = 7  # 添加一个 'age' 属性
emp1.age = 8  # 修改 'age' 属性
del emp1.age  # 删除 'age' 属性
 
也可以使用以下函数的方式来访问属性:

getattr(obj, name[, default]) : 访问对象的属性。
hasattr(obj,name) : 检查是否存在一个属性。
setattr(obj,name,value) : 设置一个属性。如果属性不存在,会创建一个新属性。
delattr(obj, name) : 删除属性。
hasattr(emp1, 'age')    # 如果存在 'age' 属性返回 True。
getattr(emp1, 'age')    # 返回 'age' 属性的值
setattr(emp1, 'age', 8) # 添加属性 'age' 值为 8
delattr(emp1, 'age')    # 删除属性 'age'
 
Python内置类属性
__dict__ :  类的属性(包含一个字典,由类的数据属性组成)
__doc__ :  类的文档字符串(类的说明,帮助信息)
__name__:  类名
__module__:  类定义所在的模块(类的全名是'__main__.className',如果类位于一个导入模块mymod中,那么className.__module__ 等于 mymod)
__bases__ :  类的所有父类构成元素(包含了一个由所有父类组成的元组)
Python 内置类属性调用示例如下:

class Employee:
    '所有员工的基类'
    empCount = 0
    def __init__(self, name, salary):
        self.name = name
        self.salary = salary
        Employee.empCount += 1
    def displayCount(self):
        print("Total Employee %d" % Employee.empCount)
    def displayEmployee(self):
        print("Name : ", self.name, ", Salary: ", self.salary)
print("Employee.__doc__:", Employee.__doc__)
print("Employee.__name__:", Employee.__name__)
print("Employee.__module__:", Employee.__module__)
print("Employee.__bases__:", Employee.__bases__)
print("Employee.__dict__:", Employee.__dict__)

执行以上代码输出结果如下:

Employee.__doc__: 所有员工的基类
Employee.__name__: Employee
Employee.__module__: __main__
Employee.__bases__: (<class 'object'>,)
Employee.__dict__: {'__module__': '__main__', '__doc__': '所有员工的基类', 'empCount': 0, '__init__': <function Employee.__init__ at 0x00A

(编辑:汽车网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章