Python--oop面向对象的学习1
类和对象的成员分析
·类和对象都可以存储成员,成员可以归类为所有,也可以归对象所有
·类存储成员时使用的是与类关联的一个对象
·独享存储成员时存储在当前对象中
·对象访问一个成员,如果对象中没有该成员,尝试访问类中的同名成员
如果对象中有此成员,一定使用该对象中的成员
·创建对象的时候,类中的成员不会自动放到对象当中,而是得到一个空的对象,没有成员
·通过对象对类中成员重新赋值或者通过对象添加成员,对应成员会被保存在对象中,而不会修改类成员
class student():
name = "claire"
age = 18
def say(self):
self.name = "lala"
self.age = 25
print(student.name)
print(student.age)
print(id(student.name))
print(id(student.age))
print("*"*20)
A = student()
print(student.__dict__)
print(A.__dict__)
A.name = "tony"
A.age = 20
print(A.name)
print(A.age)
print("*"*20)
print(id(A.name))
print(id(A.age))
claire
18
2633264420040
140709556217008
********************
{'__module__': '__main__', 'name': 'claire', 'age': 18, 'say': <function student.say at 0x000002651AF2BC80>, '__dict__': <attribute '__dict__' of 'student' objects>, '__weakref__': <attribute '__weakref__' of 'student' objects>, '__doc__': None}
{}
tony
20
********************
2633267041312
140709556217072
关于self
·self在对象的方法中表示当前对象本身,但是如果通过对象调用一个方法,那么该对象会自动传入到当前的第一个参数当中
·self并不是一个关键字,只是一个接受对象的普通参数,理论上用任何一个普通变量代替
·方法中有self形参的方法非绑定的方法,可以通过对象访问,没有self的是绑定类的方法,只能通过类访问
`使用类访问绑定类的方法时,如果类方法中需要当前类的成员,可以通过__class__来实现。--如下面的第三个脚本
1 class student(): 2 name = "claire" 3 age = 18 4 def say(self): 5 self.name = "lala" #对象的name 6 self.age = 25 #对象的name 7 print("my name is {0}".format(self.name)) 8 print("my age is {0}".format(self.age)) 9 dandan = student() 10 dandan.say()
1 2 | my name is lala my age is 25 |
class student(): name = "claire" age = 18 def say(self): self.name = "lala" self.age = 25 print("my name is {0}".format(self.name)) print("my age is {0}".format(self.age)) def sayagain(): print("hello,nice to see you again") dandan=student() dandan.say() #dandan.sayagain() 会报TypeError: sayagain() takes 0 positional arguments but 1 was given student.sayagain() #调用绑定类函数使用类名
my name is lala my age is 25 hello,nice to see you again
1 class student(): 2 name = "claire" 3 age = 18 4 def say(self): 5 self.name = "lala" 6 self.age = 25 7 print("my name is {0}".format(self.name)) 8 print("my age is {0}".format(self.age)) 9 print("lei's age is {0}.".format(__class__.age)) 10 def sayagain(): 11 print(__class__.name) 12 print(__class__.age) 13 print("hello,nice to see you again") 14 dandan=student() 15 dandan.say() 16 student.sayagain()
my name is lala my age is 25 lei's age is 18. claire 18 hello,nice to see you again
1 class A(): 2 name="haha" 3 age=18 4 def __init__(self): 5 self.name ="dandan" 6 self.age = 20 7 def say(self): 8 print(self.name) 9 print(self.age) 10 class B(): 11 name = "bbb" 12 age = 90 13 a = A() #此时,系统会默认把a作为第一个参数传入函数 14 a.say() 15 A.say(a) #此时self被a代替 16 A.say(A) #此时可以把A作为参数,直接调用了类
17 A.say(B) #此时传入的是类实例B,因为B具有name 和age属性,所以不会报错
dandan 20 dandan 20 haha 18
bbb
90
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!