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__来实现。--如下面的第三个脚本
class student():
name = "claire"
age = 18
def say(self):
self.name = "lala" #对象的name
self.age = 25 #对象的name
print("my name is {0}".format(self.name))
print("my age is {0}".format(self.age))
dandan = student()
dandan.say()
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
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))
print("lei's age is {0}.".format(__class__.age))
def sayagain():
print(__class__.name)
print(__class__.age)
print("hello,nice to see you again")
dandan=student()
dandan.say()
student.sayagain()
my name is lala
my age is 25
lei's age is 18.
claire
18
hello,nice to see you again
class A():
name="haha"
age=18
def __init__(self):
self.name ="dandan"
self.age = 20
def say(self):
print(self.name)
print(self.age)
class B():
name = "bbb"
age = 90
a = A() #此时,系统会默认把a作为第一个参数传入函数
a.say()
A.say(a) #此时self被a代替
A.say(A) #此时可以把A作为参数,直接调用了类
17 A.say(B) #此时传入的是类实例B,因为B具有name 和age属性,所以不会报错
dandan
20
dandan
20
haha
18
bbb
90
Python--oop面向对象的学习1的更多相关文章
- Python OOP面向对象
一.什么是面向对象的程序设计 1.面向过程 程序设计:核心是过程二字,过程指的是解决问题的步骤,即先干什么再干什么......面向过程的设计就好比精心设计好一条流水线,是一种机械式的思维方式. 优点是 ...
- Python之面向对象编程学习
不知不觉,学到了python的面向对象编程思想.今天我们来讨论下面向对象编程的思想. 顾名思义,面向对象,就是面向于对象,这里所说的对象不是你现实生活中你的女朋友,你的老婆,你的爱人,在编程的世界里面 ...
- 【我要学python】面向对象系统学习
第一节:初识类的定义和调用 c1.py #类 = 面向对象 #类 最基本作用:封装 #类中不仅可以定义变量 还可以定义函数等等,例: class student( ): name = ' ' age ...
- Python OOP 面向对象
1.Python实现OOP可以概括为三个概念: 继承:基于Python属性查找 多态:在x.method中,method的意义取决于x的类型 封装:方法和运算符实现行为,数据隐藏是一种惯例 2.委托: ...
- PyTorch框架+Python 3面向对象编程学习笔记
一.CNN情感分类中的面向对象部分 sparse.py super(Embedding, self).__init__() 表示需要父类初始化,即要运行父类的_init_(),如果没有这个,则要自定义 ...
- python oop面向对象笔记
#coding:utf-8 class Person(object): def __init__(self,name,wage): self.name = name self.wage = wage ...
- python面向对象编程学习
python面向对象编程 基本概念理解 面向对象编程--Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作 ...
- 如何吃透Python的面向对象(OOP)
本篇可乐和大家一起来吃透 Python 的面向对象,类和实例. 面向对象(OOP) 解释:面向对象它是一种编程的思想,将现实事物抽象化为编程对象. 举例说明:喝可乐 ① 选择自己根据配方买对应的材料 ...
- python oop培训文档里面的 正宗oop、多个函数间反复return传参、多个文件无限复制粘贴扣字、无效废物滑稽类4种方式的例子。(2)
把文档里面说的几种范式发出来. 4种编程范式实现一个人吃喝拉撒长身体的代码.语法很简单,思想模拟了所有程序员写代码时候的代码规划设计想法. 0.我不反对复制粘贴的写法,可以百度搜索复制粘贴网上现有的, ...
- Python基础—面向对象(初级篇)
一.什么是面向对象编程 面向对象编程(Object Oriented Programming,OOP,面向对象程序设计),python语言比较灵活即支持面向对象编程也支持面向函数式编程. 面向过程编程 ...
随机推荐
- wechall前十题
今天开始打一打wechall 累了打wechall,不累的时候开始打buu 第一题:Get Sourced 查看源代码即可,拉到底部 第二题:Stegano 属于misc的范畴,直接下载下来,然后no ...
- mysql 使用记录
修改 mysql 数据库密码 mysqladmin -u username -h host_name password -P <port> "new_password" ...
- synchronized 作为悲观锁,锁住了什么?
继续来认识 synchronized,上篇文章加不加 synchronized 有什么区别?我们了解了 synchronized 是在多线程并发竞争同一资源的时候使用,这一篇我们来了解,synchro ...
- python之实现图像的手绘效果
https://blog.csdn.net/riba2534/article/details/74152285 原图: b: c: d: 最终图:
- eclipse自动补全导致变量会跟上String后缀的问题解决
https://blog.csdn.net/feinifi/article/details/103665860
- js之用IndexOf返回指定字符串的次数
代码 var Str = "strs,strs,stras,str,strs,strs"; var subStr ="strs" ; var count = 0 ...
- Linux中的常用快捷键
tab 命令或路径补全键,linux里面最有用的快捷键,如果tab不到路径或命令,就代表没有这个路径或者命令,还有可能是权限不对 ctrl+c 终止当前任务命令或程序 ctrl+d 退出当前用户环境, ...
- 【ejabberd】安装XMPP服务器ejabberd(Ubuntu 12.04)
ejabberd ejabberd is a free and open source instant messaging server written in Erlang/OTP. ejabberd ...
- 运用shell脚本 执行sftp,ftp命令
sftp文件上传(从本地上传到远程) #!/bin/bash #远程上传文件测试 if [ $# -ne 2 ] then echo "miss arguments" echo & ...
- linux和windows互传文件、用户配置文件和密码配置文件、用户组管理、用户管理...
linux和windows互传文件 第一种:在linux主机上下载lrzsz软件包 1.yum install lrzsz 2.通过rz命令上传window的文件到linux主机上 用过sz 文件名下 ...