当前位置: 首页 > news >正文

面向对象1


一、面向对象
1、类
对象是特征与技能的结合体,那类就是一系列对象相同的特征与技能的结合体
2、在现实世界中:一定先有对象,后来随着人类文明的发展总结出的类对象是具体存在的,而类只是一种抽象概念
3、在程序中,务必保证:先定义类,后调用类来产生对象

现实生活中的对象:
对象1:
特征:
school="Oldboy"
name="马冬梅"
age=18
sex="female"
技能:
学习
选课

对象2:
特征:
school="Oldboy"
name="甜蜜蜜"
age=21
sex="male"
技能:
学习
选课

对象3:
特征:
school="Oldboy"
name="原石开"
age=22
sex="male"
技能:
学习
选课

现实生活中的老男孩学生类:
相同的特征
school="Oldboy"
相同的技能
学习
选课

1、程序中的类
class OldboyStudent:
用变量表示特征
school="Oldboy"

stu1, "马冬梅", 18, 'female'
def __init__(self,name,age,sex): #self=stu1 name= "马冬梅" age=18 sex="female"
# print('==========init run=============>')
self.name=name # stu1.name = "马冬梅"
self.age=age # stu1.age = 18
self.sex=sex # stu1.sex = "female"


用函数表示技能
def learn(self):
print('is learning...',self)

def choose(self):
print('choose course...')

在程序中:必须先定义类 - -----》调用类 - -----》对象

stu1=OldboyStudent()
stu1.NAME='马冬梅'
stu1.AGE=18
stu1.SEX="female"

stu2=OldboyStudent()
stu2.NAME='甜蜜蜜'
stu2.AGE=21
stu2.SEX="male"

stu3=OldboyStudent()
stu3.NAME='原石开'
stu3.AGE=22
stu3.SEX="male"

print(stu1.NAME,stu1.school)
print(stu2.NAME,stu2.school)
print(stu3.NAME,stu3.school)
上述产生的三个对象都一样了


调用类发生哪些事:
1、首先会产生一个空对象stu1
2、会自动触发类内部的__init__函数
3、然后将空对象stu1连同调用类时括号内的参数组成(stu1,"马冬梅",18,'female'),将这四个参数一起传给__init__函数

stu1=OldboyStudent("马冬梅",18,'female') #OldboyStudent.__init__(stu1,"马冬梅",18,'female')
stu2=OldboyStudent("甜蜜蜜",21,'male') #OldboyStudent.__init__(stu2,"甜蜜蜜",21,'male')
stu3=OldboyStudent("原石开",22,'male')

调用类---》产生类的对象,该对象也可以称为类的一个实例,调用类的过程也称为类的实例化
stu1=OldboyStudent('李三胖',18,'male') #OldboyStudent.__init__(stu1,'李三胖',18,'male')

OldboyStudent.country='CHINA'
print(OldboyStudent.country)
stu2=OldboyStudent('王大炮',28,'male')
print(stu2.__dict__)

类内部定义的变量是给所有对象共享,所有对象指向的都是同一个内存地址
类内部定义的函数,类可以使用,但类来用的时候就是一个普通函数,普通函数有几个参就传几个参数
类内部定义的函数,其实是给对象使用的,而且是绑定给对象用,绑定给不同的对象就是不同的绑定方法
绑定方法的特殊之处在于,谁来调用,就会将谁当作第一个参数自动传入

stu1.learn() # OldboyStudent.learn(stu1)
stu2.learn() # OldboyStudent.learn(stu2)

绑定方法的特殊之处:
1、 绑定给谁就应该由谁来调用,
2、谁来调用就会把谁当做第一个参数传入
class People:
x=1
def __init__(self,name,age,sex):
self.name=name
self.age=age
self.sex=sex

def run(self): #self=obj
print('%s is running' %self.name) #obj.name

def f1():
print('from f1')

def f2(self):
pass

obj=People('egon',18,'male') #People.__init__(obj,'egon',18,'male')
obj1=People('egon1',18,'male') #People.__init__(obj,'egon',18,'male')
obj2=People('egon2',18,'male') #People.__init__(obj,'egon',18,'male')

print(People.f1)
People.f1()
print(obj.f1)
obj.f1() #People.f1(obj)


Python一切皆对象:在python3中统一了类与类型的概念,类即类型


转载于:https://www.cnblogs.com/zhaodafa/p/8795629.html

相关文章:

  • Lambda表达式(Java)
  • 区块链将会怎样颠覆Google、Amazon、Facebook和Apple?
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • Windows Server 2012的服务管理自动化 -启动类型设置,手动启动还是自动启动
  • JVM 组成以及各部分作用
  • PHP 500报错的快速解决方法
  • windows网络模型之完成端口(CompletionPort)详解 (转)
  • [转]区块链代码快速学习实践
  • 《王牌特工2》情景再现,Youbionic推出可穿戴式机械手
  • 扩展GenericServlet实现Servlet程序 学习笔记
  • HTTP协议-HTTP响应报文
  • 《以太坊白皮书》笔记(3)—— 以太坊介绍. 下
  • zookeeper的开启启动
  • js拦截全局ajax请求
  • Redis Exception: Exceeded timeout of 00:00:03
  • 【Leetcode】101. 对称二叉树
  • hexo+github搭建个人博客
  • [译]前端离线指南(上)
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • Brief introduction of how to 'Call, Apply and Bind'
  • Docker容器管理
  • js面向对象
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • PV统计优化设计
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • TCP拥塞控制
  • 多线程事务回滚
  • 高性能JavaScript阅读简记(三)
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 排序算法之--选择排序
  • 使用SAX解析XML
  • 数据科学 第 3 章 11 字符串处理
  • 我感觉这是史上最牛的防sql注入方法类
  • 一道面试题引发的“血案”
  • 译有关态射的一切
  • nb
  • ​力扣解法汇总946-验证栈序列
  • #Linux(Source Insight安装及工程建立)
  • #mysql 8.0 踩坑日记
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (C++20) consteval立即函数
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (转)创业的注意事项
  • (转)我也是一只IT小小鸟
  • .NET Core 版本不支持的问题
  • .Net Core与存储过程(一)
  • .NetCore实践篇:分布式监控Zipkin持久化之殇
  • .net项目IIS、VS 附加进程调试
  • [1204 寻找子串位置] 解题报告
  • [20171101]rman to destination.txt
  • [ASP.NET 控件实作 Day7] 设定工具箱的控件图标