Python面向对象之动态静态方法
动静态方法
在类中定义的函数有多种特性
- 直接在类中定义函数
再类中直接定义函数,默认绑定给对象,类调用时有几个参数就要传几个参数,对象调用时该函数的第一个参数默认为对象
# 定义一个类
class Student:
# 类公用数据
school_name = '家里蹲大学'
# 对象独有数据
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
# 类公用方法(函数、功能)
def curricula_variable(self):
print(f'{self.name}正在选课')
# 类直接调用功能
stu1 = Student('kangkang', 18, 'male')
Student.curricula_variable(stu1)
---------------------------------------------------------------------------
kangkang正在选课
- 绑定给类的函数
被@classmenthod修饰的函数,默认绑定给类,类调用第一个参数就是类自身,对象也可以调用,应且会自动将产生该对象的类当作第一个参数传入
# 定义一个类
class Student:
# 类公用数据
school_name = '家里蹲大学'
# 对象独有数据
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
# 类公用方法(函数、功能)
def curricula_variable(self):
print(f'{self.name}正在选课')
@classmethod
def func(cls): # 绑定给类的函数,第一位新参为cls
print('我是默认绑定给类的功能', cls)
# 类可直接调用
Student.func()
# 对象调用
stu1 = Student('kangkang', 18, 'mela')
stu1.func()
-----------------------------------------------------------------------------
我是默认绑定给类的功能 <class '__main__.Student'>
我是默认绑定给类的功能 <class '__main__.Student'>
- 被修饰的普通函数
被@staticmethod修饰的函数,是普通的函数,此函数无论是类还是对象调用,都必须手动传参
# 定义一个类
class Student:
# 类公用数据
school_name = '家里蹲大学'
# 对象独有数据
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
# 类公用方法(函数、功能)
def curricula_variable(self):
print(f'{self.name}正在选课')
@classmethod
def func(cls):
print('我是默认绑定给类的功能', cls)
@staticmethod
def func2(aaa):
print(f'我是 {aaa} 被修饰的普通函数,调用我都需要手动传参', )
# 类直接调用
Student.func2('普通函数')
# 对象调用
stu1 = Student('kangkang', 18, 'mela')
stu1.func2('普通函数')
----------------------------------------------------------------------------------
我是 普通函数 被修饰的普通函数,调用我都需要手动传参
我是 普通函数 被修饰的普通函数,调用我都需要手动传参