目录
①__XX__()函数叫做魔法方法,指的是具有特殊功能的函数
③__str__() --------- 类似Java语言中的toString()方法
一,封装
1,类和对象
Java和python都是面向对象的语言
①创建类,语法
class 类名:
代码
#Java class Person{ } #python 首字母需要大写 class Student: pass
②实例化对象
对象名 = 类名( )
# 实例化 #java new Student() # python s=Student() #打印s 肯定是内存地址 print(s)控制台输出<__main__.Student object at 0x000001C64DC733D0>
③调用类属性和方法语法
对象名.属性;
对象名.方法()
class Student: def say(self): # self这个参数是当前这个对象,不需要自己传参 # 可以通过self去取得自身携带的一些东西,如属性 print("hello",self) # 实例化 s=Student() print(s) s.say()控制台输出,self和对象 内存地址一致
<__main__.Student object at 0x0000029B91939370>
hello <__main__.Student object at 0x0000029B91939370>
一个函数定义在类里面叫方法
2,self
self指的是调用该函数的对象
函数中默认参数self,该默认的参数self指的是调用该函数的对象
案例1:self和对象的内存地址是否一致?
class Student: def say(self): # self这个参数是当前这个对象,不需要自己传参 # 可以通过self去取得自身携带的一些东西,如属性 print("hello",self) # 实例化 s=Student() print(s) s.say()控制台输出,self和对象 内存地址一致
<__main__.Student object at 0x0000029B91939370>
hello <__main__.Student object at 0x0000029B91939370>
案例2:如果是多个对象,调用同一个函数,self地址是否一致?
3,属性
①类属性
a,可以通过类名或者对象访问,写在类里面
语法: 变量名 = 变量值
class Student: name='小宝' sex:str age=20 def say(self): # self这个参数是当前这个对象,不需要自己传参 # 可以通过self去取得自身携带的一些东西,如属性 print("hello",self)
b,修改类属性
类属性的修改,只能通过类修改,不能通过对象修改
语法:类名.变量名=变量值
# name 实例属性 s.name="张三"#添加了一个实例属性name 值是张三 Student.name="haha"#修改了类属性 # s有几个name属性? 【name类属性】【name实例属性】 del s.name #删除了name实例属性 # s.birth='2021-1-1'#不会报错,python是弱类型,对变量没有类型限制,对对象没有属性限制
注意:如果通过对象对属性进行重新赋值,实际上是给该对象又重新定义了一个属性名一样的变量
②添加对象属性
a,类外面添加对象属性
语法: 对象名.属性名 = 值 (注意:该种方式添加的属性,只能属于该对象的)
s.name="小张"
b,类里面添加对象属性
语法: 变量名 = 变量值 (注意:该种方式添加的属性,属于所有类对象的)
name='小宝'
c,__init__()方法中添加对象属性
语法:self.属性名 = 值 (用在__init__()初始化方法中)
def __init__(self,nam