类
# 定义
class ClassName:
<语句-1>
.
.
.
<语句-N>
与 Java 一个文件一个类不同,python 的类定义在代码执行的必经之路上,
class MyClass:
"""一个简单的示例类"""
i = 12345
def f(self):
return 'hello world'
# 静态调用
MyClass.i
MyClass.f
# 实例化
>>> class Complex:
... def __init__(self, realpart, imagpart):
... self.r = realpart
... self.i = imagpart
>>> x = Complex(3.0, -4.5)
>>> x.r, x.i
(3.0, -4.5)
- 类中的
__init__
函数即为构造函数
# 类变量与实例变量
class Dog:
kind = 'canine' # 类变量被所有实例所共享
def __init__(self, name):
self.name = name # 实例变量为每个实例所独有
>>> d = Dog('Fido')
>>> e = Dog('Buddy')
>>> d.kind # 被所有的 Dog 实例所共享
'canine'
>>> e.kind # 被所有的 Dog 实例所共享
'canine'
>>> d.name # 为 d 所独有
'Fido'
>>> e.name # 为 e 所独有
'Buddy'
由此例子可知,类变量在类中直接声明,而实例变量需要在
init
函数中挂载到self
参数中。约定实例方法的第一个参数名为
self
,作用类似于 Java 的this
# 私有变量
使用 _
开头的变量、方法名视为私有。
# 继承
# 单继承
class DerivedClassName(BaseClassName):
<语句-1>
.
.
.
<语句-N>
类似 Java:
class DerivedClassName extend BaseClassName
继承的类是在其他模块下时:
class DerivedClassName(modname.BaseClassName):
# 多重继承
class DerivedClassName(Base1, Base2, Base3):
<语句-1>
.
.
.
<语句-N>
- 搜索从父类所继承属性的操作是深度优先、从左到右
# 结构体
from dataclasses import dataclass
@dataclass
class Employee:
name: str
dept: str
salary: int
>>> john = Employee('john', 'computer lab', 1000)
>>> john.dept
'computer lab'
>>> john.salary
1000
上次更新: 2024/10/11, 23:55:46