绑定方法
'''1.绑定给对象的方法'''
class Student():
school = 'China'
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
'''绑定给对象来调用的方法'''
def tell_info(self):
print('name:%s,age:%s,gender:%s'%(self.name,self.age,self.gender))
stu=Student('kevin',20,'female')
'''对象来调用方法,会把对象自己当成第一个参数传递给方法的第一个形参'''
stu.tell_info()
Student.tell_info(stu)
class Mysql():
def __init__(self,ip,port):
self.ip=ip
self.port=port
'''
会把类自动当成第一个参数传给方法的第一个形参cls
条件:
1.加一个装饰器 @classmethod
2.把方法的第一个形参改为cls
3.外部调用该方法的时候使用类来调用
4.绑定给类的方法中,就没有self这个参数了
5.绑定给对象的方法中,就没有cls这个参数了
'''
@classmethod
def from_func(cls):
return cls('127.0.0.1','3306')
M1=Mysql.from_func()
print(M1.ip)
print(M1.port)
非绑定方法(静态方法static)
class Person():
def __init__(self,name,age,gender):
self.name=name
self.age=age
self.gender=gender
self.id=self.create_id()
@staticmethod
def create_id():
"""当你在函数中不需要对象,也不需要类的时候,就可以把函数设置为静态方法,
类能调用,对象也能调用,但是不能传递参数
"""
import uuid
return uuid.uuid4()
def func(self):
'''如果你在方法中即需要对象,也需要类,就把方法绑定给对象'''
stu=Person('lining',20,'male')
print(stu.id)
print(stu.create_id())
print(Person.__name__)
print(Person.create_id())
隐藏属性
1.怎么隐藏
2.为什么要隐藏
'''
1.隐藏属性在类的定义阶段发生了变形:__类名__属性名
2.隐藏属性在类的外部能不能取到?理论上是取不到了,但是非要取,也能取到,在类的外部取隐藏之后的属性不是目的
3.类属性,类方法,对象属性都可以被隐藏
4.隐藏属性对外不对内
5.为什么要隐藏?
就是可以对修改内部的属性的时候,可以在类的内部做更好的限制,然后再类的内部开方一个公共的接口,对外返回内部隐藏的值
'''
class Student():
__school = 'China'
def __init__(self, name, age):
self.name = name
self.age = age
def __func(self):
print('from func')
def __get_school(self):
return self.__school
def set_school(self, i):
if type(i) is str:
Student.__school = i
else:
print('err')
stu = Student('kevin', 20)
stu.set_school('Shanghai')
print(Student._Student__school)
property装饰器
它是一个内置的装饰器,它是把方法伪装成属性来使用
class Student():
__school = 'China'
def __init__(self, name, age):
self.name = name
self.age = age
def func(self):
print('from func')
@property
def school(self):
return self.__school
@school.setter
def school(self, i):
if type(i) is str:
Student.__school = i
else:
print('err')
@school.deleter
def school(self):
del Student.__school
stu = Student('kevin', 20)
stu.school='Tianjin'
print(stu.school)
del stu.school
print(stu.school)
面向对象的三大特征
封装
封装就是定义类,将属性和操作组织再类中
组装:将数据和操作组装到一起
隐藏数据:对外只暴露一些接口,通过接口访问对象,比如驾驶员使用汽车,不需要了解汽车的构造,只需要知道使用什么部件怎么驾驶就行,踩了油门就能跑,可以不了解其中的机动原理
继承
多复用:继承来的就不用自己写了
多继承少修改,OCP,使用继承来改变,来体现个性
多态
面向对象编程最灵活的地方,动态绑定
人类就是封装
人类继承自动物类,孩子继承父母特征,分为单一继承,多继承
多态,继承自动物类的人类,猫类的操作“吃”不同
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)