类和对象的基础语法
[python官方文档](8. 复合语句 — Python 3.12.4 文档)
- 类的定义
- python中类使用关键字class定义
'''
class 类名(继承):
实例方法
'''
class Person:
pass
- 实例化对象
'''
变量名 = 类名()
'''
A = Person()
- 构造函数
- 实例化类对象时自动调用
class Person:
def __init__(self):
print('创建对象时构造函数执行')
对象是类的实例,具有类定义的属性和方法
实例可以调用类方法和实例方法
实例可以访问类变量和实例变量
- self
- self是类的实例方法中的参数,用来指代这个实例自己
class Person:
def __init__(self,name):
self.name = name
def say(self):
print(self.name)
属性和方法
-
属性
- 属性可以记录每个对象自身的数据
- 使用实例.属性名调用
-
方法
- 实例方法实质是一个函数,定义在类里面的函数
- 实例.类方法调用
-
类属性
- 类属性是属于类的属性,用来存储共有属性
- 可以使用类和实例访问
class Person:
g = 'China'
def __init__(self,name):
self.name = name
a = Person('zhang')
print(Person.g)
print(a.g)
- 类方法
- 使用@classmethod装饰器定义的方法
- cls为第一个形参,绑定类
- 类和实例都可以调用
- 不能访问对象的实例属性
- cls 访问类属性,调用类方法,创建类实例
class Person:
g = 'China'
def __init__(self,name):
self.name = name
@classmethod
def change_g(cls):
cls.g = '中国'
a = Person('zhang')
Person.change_g()
a.change_g()
print(Person.g)
print(a.g)
- 静态方法
- 使用@staticmethod装饰定义在类里的函数
- 不用传递cls和self参数
- 不能访问实例属性可以访问类属性
class Person:
g = 'China'
def __init__(self,name):
self.name = name
@classmethod
def change_g(cls):
cls.g = '中国'
@staticmethod
def chang():
Person.g = 'China'
a = Person('zhang')
Person.change_g()
a.change_g()
print(Person.g)
print(a.g)
a.chang()
print(a.g)
- 初始化方法
- init 创建对象时自动执行
class Person:
def __init__(self,name):
self.name = name
a = Person('zhang')
- 魔法方法
- 是python中的特殊方法,以双下划线开头和结尾的,可以自定义类的行为,可以和内置和函数,运算符交互
'''__init__(self) 初始化实例方法
__len__(self) 定义对象的长度
__getitem__(self) 定义对象的索引操作
__iter__(self) 定义迭代器对象
__next__(self)定义迭代器的下一个元素'''
继承
- 从已有的类中继承出新的类,新的类具有原类的数据属性和函数
- 单继承,由一个基类衍生而来
- 多继承,继承多个类,方法同名默认调用参数位置靠前的父类
- 覆盖,子类实现了和基类同名方法,调用时调用子类的方法
- 封装
- 私有属性和私有方法 使用双下划线开头的为私有属性或方法
- 只能私有成员能访问和修改
多态
继承的类可以使用方法覆盖父类的方法,实际调用时使用的时子类的方法
class Person:
def say(self):
print('hello')
class Student(Person):
def say(self):
print('hello hello')
class work(self):
def say(self):
print('OK收到')