类 Class
#先定义类,后产生对象
#调用类会产生对象,返回的是对象
注意:类体代码是在类定义阶段就会立即执行,会产生类的名称空间
class People:
def __init__(obj, x, y, z):
obj.name = x
obj.age = y
obj.sex = z
obj1=People('peng',18,'male') # 调用类的时候会实例化一个对象,并自动执行__init__ 方法
# 调用类的过程又称之为实例化,发生了三件事
# 1、先产生一个空对象
# 2、python会自动调用类中的__init__方法然将空对象已经调用类时括号内传入的参数一同传给__init__方法
# 3、返回初始完的对象
# __init__方法
# 强调:
# 1、会在调用类时自动触发执行,用来为对象初始化自己独有的数据
# 2、__init__内应该存放是为对象初始化属性的功能,但是是可以存放任意其他代码,想要在类调用时就立刻执行的代码都可以放到该方法内
# 2、一定不能自定义返回值 一定是返回None
#python为类内置的特殊属性
类名.__name__# 类的名字(字符串)
类名.__doc__# 类的文档字符串
类名.__base__# 类的第一个父类(在讲继承时会讲)
类名.__bases__# 类所有父类构成的元组(在讲继承时会讲)
类名.__dict__# 类的字典属性
类名.__module__# 类定义所在的模块
类名.__class__# 实例对应的类(仅新式类中)
类中存放的是对象共有的数据与功能
# 一:类可以访问:
# 1、类的数据属性
# 2、类的函数属性
类中的东西是给对象用的
# 1、类的数据属性是共享给所有对象用的,大家访问的地址都是一样的,绑定给对象后也是一样的,但修改绑定对象的属性时会在对象内单独创建新属性。
# 2、类中定义的方法是绑定给对象使用的,类方法绑定对象后称之为绑定方法,各个对象的绑定方法内存地址各不相同,与类方法地址也不同。
# 类调用自己的方法属性必须严格按照函数的用法来,方法本质就是函数
# 绑定方法的特殊之处在于:谁来调用绑定方法就会将谁当做第一个参数自动传入self
封装
封装是面向对象三大特性最核心的一个特性 ----------封装<->整合
将封装的属性进行隐藏操作
1、如何隐藏:在属性名前加__前缀,就会实现一个对外隐藏属性效果
该隐藏需要注意的问题:
I:在类外部无法直接访问双下滑线开头的属性,但知道了类名和属性名就可以拼出名字:_类名__属性,然后就可以访问了,如Foo._A__N,所以说这种操作并没有严格意义上地限制外部访问,仅仅只是一种语法意义上的变形。
II:这种隐藏对外不对内,因为__开头的属性会在检查类体代码语法时统一发生变形
III: 这种变形操作只在检查类体语法的时候发生一次,之后定义的__开头的属性都不会变形
class Foo:
__x = 1 # _Foo__x = 1
def __init__(self,name,age):
self.__name=name
self.__age=age
obj=Foo('egon',18)
print(obj.__dict__)
print(obj.name,obj.age)
2、为何要隐藏?
I、隐藏数据属性"将数据隐藏起来就限制了类外部对数据的直接操作,然后类内应该提供相应的接口来允许类外部间接地操作数据,接口之上可以附加额外的逻辑来对数据的操作进行严格地控制:
II、隐藏函数/方法属性:目的的是为了隔离复杂度
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!