Python入门示例系列21 面向对象初级
发布时间:2023-04-12 14:20:16 所属栏目:教程 来源:
导读:Python 的面向对象的语法格式与其他语言(C++,Java,C# 等)有显著区别,概念类似但语法格式相差很远。
类Class: 描述具有相同属性和方法的对象的集合,采用变量存储数据域,定义方法执行动作行为。
创建类
类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 (编辑:汽车网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
