jpython面向对象
时间: 2024-12-29 12:19:04 浏览: 8
### Jython 中面向对象编程概念
Jython 是 Python 编程语言的一个实现版本,它运行在 Java 平台之上并能够无缝集成 Java 类库。因此,在 Jython 中同样支持完整的面向对象特性。
#### 创建类与实例化对象
类似于标准 Python 的语法结构来定义类:
```python
class Employee:
'所有员工的基类'
empCount = 0
def __init__(self, name, salary):
self.name = name
self.salary = salary
Employee.empCount += 1
def displayCount(self):
print(f"Total Employee {Employee.empCount}")[^1]
def displayEmployee(self):
print(f"Name : {self.name}, Salary: {self.salary}")
```
此段代码展示了如何创建一个名为 `Employee` 的类,并包含了两个属性 (`name`, `salary`) 和三个方法 (构造函数 `__init__()`, 计数器显示 `displayCount()` 及个人信息展示 `displayEmployee()`)。
#### 使用 setattr 函数动态设置属性
可以利用内置函数 `setattr(object, attribute, value)` 来给对象添加新属性或修改已有属性值:
```python
e = Employee('John Doe', 2000)
setattr(e, "age", 30)
print(getattr(e, "age")) # 输出:30
```
上述例子说明了即使是在初始化之后也可以安全地增加额外的数据成员到已存在的对象上[^3]。
#### 调用类方法和静态方法
对于那些不需要访问特定实例状态的方法来说,可以选择将其声明为类方法或是静态方法以便更高效地工作。这类方法通常用于执行某些通用操作而不必依赖具体的实例变量。
```python
from datetime import date
class Person:
@classmethod
def fromBirthYear(cls, name, birthYear):
return cls(name, date.today().year - birthYear)
@staticmethod
def isAdult(age):
return age >= 18
person1 = Person.fromBirthYear("Alice", 1990)
print(Person.isAdult(22)) # True
```
这里给出了两个装饰器的例子——一个是 `@classmethod` ,另一个是 `@staticmethod`. 前者允许我们基于当前类(`cls`)创建新的实例;后者则提供了一个独立的功能测试年龄是否成年[^2]。
阅读全文