一、Python的面向对象——类
1、基本格式和方法访问
lass People: #类名(首字母大写)
# 类属性
name = "张三" #类型属性 ,公有的
age = 20
_sex= "男" # 保护属性
__height = 175 # 私有属性
# 构造函数
def __init__(self, name, age):# 当对象被创建时就会被调用
self.name = name
self.age = age
print("{}被创建了".format(self.name))
# 方法
def say(self): #self 是必须的 --当前对象本身
print("hello {},我今年{}岁".format(self.name, self.age))
def selfText(self):
print("self是什么>>>:",self)
def introduceself(self):
print("我的名字是{},性别{},今年{}岁。".format(self.name,self.sex,self.age))
#析构函数
def __del__(self):#当一个对象的“引用计数”变成 0,也就是没有人再用这个对象时,它就会被销毁,这时就会自动调用 __del__()。
print("{}被销毁".format(self.name))
wang = People("王五", 25) # 实例化对象
zhang = People("张三",24)
# wang.say() # 调用方法
print("王五:",wang)
wang.sex ="男" #对象属性
wang.introduceself()
wang.selfText()
print("张三:",zhang)
zhang.selfText()
2、构造函数和析构函数
wang = People("王五", 25) # 实例化对象
zhang = People("张三",24)
运行结果:
结果显示表明:
构造函数:当对象被创建时就会被调用。
析构函数:当一个对象的“引用计数”变成 0,也就是没有人再用这个对象时,它就会被销毁,这时就会自动调用 __del__()。
二、Python面向对象——封装
1、变量访问权限
通过举例说明:
class People: #类名(首字母大写)
# 类属性
name = "张三" #类型属性 没有下划线 是公有的属性
age = 20
_sex= "男" # 保护属性
__height = 175 # 私有属性
# 构造方法
def __init__(self, name, age): # 构造方法
self.name = name # 实例属性
self.age = age # 实例属性
# 方法
def setheight(self,height):
self.__height = height # 设置私有属性的值
wang = People("王五", 25) # 实例化对象
zhang = People("张三",24)
#这种方式不推荐使用
wang._People__height = 190 # 访问私有属性
print(wang._People__height) # 访问私有属性 实际在Python私有属性是通过名称重整来实现的,实际上是将__height改成了_People__height
# 一般通过方法来访问私有属性
wang.setheight(180) # 设置私有属性的值
print(wang._People__height) # 访问私有属性 实际在Python私有属性是通过名称重整来实现的,实际上是将__height改成了_People__height
运行结果:
2、访问权限
属性名 | 写法 | 访问权限 | 是否能被类外访问 | Python 中的作用 |
---|---|---|---|---|
name | 无下划线 | 公有属性 | ✅ 可以 | 最常用的公开访问属性 |
_sex | 单下划线 | 受保护属性 | ✅ 可以(不推荐) | 是一种开发者的约定,表示内部使用,不强制 |
__height | 双下划线 | 私有属性 | ❌ 不能直接访问 | Python 会自动“改名”为 _Person__height ,防止外部访问 |
3、与c++的区别
区别点 | Python | C++ |
---|---|---|
是否强制 | ❌ 不强制,靠约定 | ✅ 严格控制:外部不能访问 protected/private |
访问私有成员 | 可以通过“改名”访问(如 _Person__height ) | 完全禁止访问私有成员 |
开发习惯 | 强调“你应该不访问” | 强调“你不能访问” |