对象的独有功能
class Person:
school = '蓝翔挖掘机炒菜学校'
def __init__(self, name):
self.name = name
def eat(self):
print('%s说用挖掘机炒菜真香!!!!'%self.name)
res1 = Person('summer')
res1.eat()
res2 = Person('jaja')
res2.eat()
类名直接调用公共功能的话是会报错的,必须要传对应的参数进去
Person.eat() ×
res3 = Person('jason')
Person.eat(res3)

动静态方法
1.绑定给对象的方法
eg:
class Person:
school = '蓝翔挖掘机炒菜学校'
def stu(self):
print('上课越来越认真了啊!!',self)
res = Person()
res.stu()
------------
2.绑定给类的方法
class Person:
school = '蓝翔挖掘机炒菜学校'
def stu(self):
print('上课越来越认真了啊!!',self)
@classmethod
def cooking(cls):
print('挖掘机炒菜功能越来越6了')
rea = Person()
Person.cooking()
res = Person()
res.stu()
res.cooking()
3.普通函数(也是静态方法)
@staticmethod
def run(a,b):
print('我爱挖掘机')
rea = Person()
Person.run(1,2)
res = Person()
res.run(1,3)
动静态方法总结
1.绑定给对象的方法 使用self
直接让对象自身当作第一个参数传入
2.绑定给类的方法 @classmethod 加语法糖
将类名本身当作第一个参数传入
而对象来调用绑定给类的方法时,会自动将产生该对象的类作为第一个参数传入
3.静态方法 @staticmethod 加语法糖
就是函数本身了,调用的时候括号内有几个参数就需要传几个参数,不管是对象还是。
面向对象三大特性之继承
面向对象三大特性分别是:
继承、封装、多态
class 类名(类名):
pass
1.定义类的时候在类名后加括号
2.括号内填写你需要继承的类名
3.括号内可以填写多个父类 逗号隔开即可
class C:
house3 = 5
def money3(self):
print('不好好上课回家继承家业')
class person(C):
pass
print(person.money3)
person.money3(1)
我们将被继承的类称之为: 父类或基类或超类
eg:上述的c
我们将继承类的类称之为: 子类或派生类
eg:上述类person
ps:平时最常用的就是父类和子类
继承的本质
class people:
def __init__(self, name, age, hobby):
self.name = name
self.age = age
self.hobby = hobby
class teach(people):
pass
class Student(people):
def choice(self):
print('正在选课')
teh = teach('sum',38,'shopping')
print(teh.__dict__)
stu1 = Student('summer',18,'read')
print(stu1.__dict__)
------------
对象:数据和功能的结合体
类:多个对象相同的数据和功能的结合体
父类:多个类相同的数据和功能的结合体
ps:类和父类最主要的功能其实就是节省代码
数据和方法的查找
不继承查找顺序
先从对象自身查找 没有的话 再去产生该对象的类中查找
class Student():
def choice(self):
print('正在选课')
res = Student()
res.choice()
单继承查找顺序
class A1:
def func1(self):
print('from A1 func1')
def func2(self):
print('from A1 func2')
self.func1()
class MyClass(A1):
def func1(self):
print('from MyClass func1')
obj = MyClass()
obj.func2()
多继承查找顺序
class A:
house = 10
def money(self):
print('不好好上班就回来继承家业')
class B:
house = 5
def money(self):
print('不好好上学就回来种红薯')
class C:
house = 5
def money(self):
print('不好好上课就回村捡破烂')
class person(A, B, C):
def money(self):
print('好好学习天天向上')
print(person.money)
person.money(1)
ps:我这就是为了更直观的看出继承查找顺序写的类体代码,实际的继承本质是为了节省代码
也可以使用类点mro()方法查看该类产生的对象名字的查找顺序

经典类与新式类
经典类
不继承object或其子类的类(什么都不继承)
python2中需要这么写:
class MyClass(object):
def func1(self):
print('from MyClass func1')
新式类
继承了object或其子类的类
class MyClass():
def func1(self):
print('from MyClass func1')
object里面几乎都是类具备的功能 ,我们在调用class的时候其实是在调用object方法,因为class继承了object
派生方法
子类中定义类与父类一模一样的方法并且扩展了该功能>>>:派生
class people:
def __init__(self, name, age, hobby):
self.name = name
self.age = age
self.hobby = hobby
class teach(people):
def __init__(self,name, age, hobby,job):
super().__init__(name, age, hobby)
self.job = job
class Student(people):
def __init__(self,name, age, hobby,score):
super().__init__(name, age, hobby)
self.score = score
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现