1,类可以理解为是一个模子,可以是代码精简,方便增加实例,方便修改,更加规范,能知道具体的属性,方法,但是不知道具体的值

2,对象有具体的值,属性和技能都是根据类规范的

3, 先有类才有对象

4,面向程序,面向函数,面向对象编程

5,面向对象优点:解决了程序的扩展性,维护和扩展变得简单,大大提高程序的开发效率,缺点,可控性比较差,应用场景:需求经常变化的软件

6,Python中一切皆对象,好比Linux中一切结尾文件

class Person:
def __init__(self,*args):
# self是一个可以存储很多属性的大字典
self.name = args[0] # 王子点里添加属性的方式发生了变化
self.hp = args[1]
self.aggr = args[2]
self.sex = args[3]
def walk(self):
print('走走走') lisa = Person('lisa',100,200,'female') # 实例化过程,想象序列化
print(lisa.__dict__)
print(Person.__dict__) # {'name': 'lisa', 'hp': 100, 'aggr': 200, 'sex': 'female'}
# {'__module__': '__main__', '__init__': <function Person.__init__ at 0x10d412840>, 'walk': <function Person.walk at 0x10d4127b8>, '__dict__': <attribute '__dict__' of 'Person' objects>, '__weakref__': <attribute '__weakref__' of 'Person' objects>, '__doc__': None}

7,双下init函数会在实例化的时候自动调用,然后传参,并且会自动返回一个self对象

# 对象 = 类名()
# 过程:
# 类名() 首先会创造出一个对象,创建了一个self变量,创建的过程我们不需要关心,系统自检给创建
# 自动调用init方法,类名括号里的参数会被这里接收
# 执行init方法,
# 返回sel

8,帮助理解面向对象的一段代码

def Person(*args,**kwargs):
self = {}
def attack(self,dog):
dog['life_value'] -= self['aggressivity'] def __init__(name,aggressivity,life_value):
self['name'] = name
self['aggressivity'] = aggressivity
self['life_value'] = life_value
self['attack'] = attack __init__(*args,**kwargs)
return self egg = Person('lisa',78,10)
print(egg['name'])

9,类里面,我只要已创建一个class的时候,我就拥有了一个self,self等于空字典这个事不需要你去做,别人替你做了,只是你直接拿着这个就可以用了。以点的方式操作然后最后把self返回给对象,新创建的对象,就是self。self里面存储的就是一个字典的关系

class Person:
def __init__(self,*args):
# self是一个可以存储很多属性的大字典
print(self.__dict__) # {} self.name = args[0] # 王子点里添加属性的方式发生了变化
self.hp = args[1]
self.aggr = args[2]
self.sex = args[3] print(self.__dict__) # {'name': 'lisa', 'hp': 100, 'aggr': 200, 'sex': 'female'} lisa = Person('lisa',100,200,'female')

10,新实例化的对象就是self

class Person:
def __init__(self,*args):
# self是一个可以存储很多属性的大字典,
print(self.__dict__) # {} self.name = args[0] # 只不过往字典里添加属性的方式发生了变化
self.hp = args[1]
self.aggr = args[2]
self.sex = args[3]
print(id(self))
print(self.__dict__) # {'name': 'lisa', 'hp': 100, 'aggr': 200, 'sex': 'female'} lisa = Person('lisa',100,200,'female')
print(id(lisa))
print(lisa.__dict__) # ID一样,内存地址一样,所以两个就是一样的 运行结果:
{}
4417958464
{'name': 'lisa', 'hp': 100, 'aggr': 200, 'sex': 'female'}
4417958464
{'name': 'lisa', 'hp': 100, 'aggr': 200, 'sex': 'female'}

11,调用方法

class Person:
def __init__(self,*args): # 一般双下init都放在最上面 self.name = args[0]
self.hp = args[1]
self.aggr = args[2]
self.sex = args[3]
def walk(self): # 这个参数是必须有的,只要是类的方法就得有,这个名字不用self也可以,但是我们不成文的规定都叫self
print('hello') lisa = Person('lisa',100,200,'female')
print(lisa.__dict__)
print(Person.__dict__) # 类的字典里面有个walk,所以我们可以用类来调用试试
# {'name': 'lisa', 'hp': 100, 'aggr': 200, 'sex': 'female'}
# {'__module__': '__main__', '__init__': <function Person.__init__ at 0x1007b17b8>, 'walk': <function Person.walk at 0x1007b16a8>, '__dict__': <attribute '__dict__' of 'Person' objects>, '__weakref__': <attribute '__weakref__' of 'Person' objects>, '__doc__': None} # Person.walk() # 提示错误 TypeError: walk() missing 1 required positional argument: 'self'
Person.walk(lisa) # 因为Lisa就是self,所以我们传入Lisa
# hello
# 这种调用有一种简写的方法就是
lisa.walk() # 这个和Person.walk(lisa)效果是一样的

12,总结

# 对象能做的事:
# 查看属性
# 调用方法
# 类名能做的事:
# 实例化
# 调用方法:只不过要自己调用self参数

13,静态属性

class Person:
country = 'China' # 创造了一个只要是这个类就一定有的属性
# 类属性,静态属性 def __init__(self,*args): self.name = args[0]
self.hp = args[1]
self.aggr = args[2]
self.gender = args[3] def walk(self):
print('hello') lisa = Person('lisa',100,200,"female") print(Person.country) # China
print(Person.__dict__['country']) # China
print(lisa.__dict__['name']) # lisa
# 类名不可以调用对象的属性,可以查看静态属性,不需要实例化就可以查看

13,修改对象属性,可以通过属性或者字典来修改

    country = 'China'  # 创造了一个只要是这个类就一定有的属性
# 类属性,静态属性 def __init__(self,*args): self.name = args[0]
self.hp = args[1]
self.aggr = args[2]
self.gender = args[3] def walk(self):
print('hello') lisa = Person('lisa',100,200,"female") print(Person.country) # China
print(Person.__dict__['country']) # China
print(lisa.__dict__['name']) # lisa
# 类名不可以调用对象的属性,可以查看静态属性,不需要实例化就可以查看 lisa.__dict__['name'] = 'lucy' # 修改成功
print(lisa.__dict__['name']) # lucy
# __dict__对于对象的属性增删改查都可以通过字典的语法进行,但是正产情况下我们不太这样用,我们一般这样用
lisa.name = 'jack' # 通过属性改,但是不通过字典改
print(lisa.__dict__['name']) # jack
# 这两种修改方式本质上是一样的

14,类属性也就是静态属性的修改不可以通过字典来修改,只能通过属性来修改

class Person:
country = 'China' # 创造了一个只要是这个类就一定有的属性
# 类属性,静态属性 def __init__(self,*args): self.name = args[0]
self.hp = args[1]
self.aggr = args[2]
self.gender = args[3] def walk(self):
print('hello') lisa = Person('lisa',100,200,"female") print(Person.country) # China
print(Person.__dict__['country']) # China
# Person.__dict__['country'] ='USA'
# TypeError: 'mappingproxy' object does not support item assignment
Person.country = 'USA' # 修改成功

15,大写开头的名字,一般都是给类名用

16,实例,计算圆的面积和周长

from math import pi
class Circle:
def __index__(self,r):
self.r = r def area(self):
return pi *(self.r**2) def perimeter(self):
return 2*pi*self.r c1 = Circle(6)
print(c1.area())
print(c1.perimeter())

day22:初识面向对象的更多相关文章

  1. day22 01 初识面向对象----简单的人狗大战小游戏

    day22 01 初识面向对象----简单的人狗大战小游戏 假设有一个简单的小游戏:人狗大战   怎样用代码去实现呢? 首先得有任何狗这两个角色,并且每个角色都有他们自己的一些属性,比如任务名字nam ...

  2. 第五章 JavaScript对象及初识面向对象

    第五章   JavaScript对象及初识面向对象 一.对象 在JavaScript中,所有事物都是对象,如字符串.数值.数组.函数等. 在JavaScript对象分为内置对象和自定义对象,要处理一些 ...

  3. python - 初识面向对象

    1.初识面向对象       面向过程:一切以事务的发展流程为中心           优点:负责的问题流程化,编写相对简单         缺点:可扩展性差,只能解决一个问题,改造也会很困难,牵一发 ...

  4. python之路--初识面向对象

    一 . 初识面向对象 面向过程: 一切以事务的发展流程为中心. 面向对象: 一切以对象为中心. 一切皆为对象. 具体的某一个事务就是对象 打比方: 大象进冰箱 步骤: 第一步, 开门, 第二步, 装大 ...

  5. python 全栈开发,Day19(组合,组合实例,初识面向对象小结,初识继承)

    一.组合 表示的一种什么有什么的关系 先来说一下,__init__的作用 class Dog: def __init__(self, name, kind, hp, ad): self.name = ...

  6. Day7 初识面向对象,面向对象之继承、多态和封装

    一.面向对象引言 一.面向对象的程序设计的由来 详述见:http://www.cnblogs.com/linhaifeng/articles/6428835.html 二.面向对象引子 写一个简单程序 ...

  7. Java基础-初识面向对象编程(Object-Oriented-Programming)

    Java基础-初识面向对象编程(Object-Oriented-Programming) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Java是一门面向对象的程序设计语言.那么什 ...

  8. python学习之老男孩python全栈第九期_day022知识点总结——初识面向对象

    一. 面向对象的引入# 人狗大战 def person(name,HP,aggr,sex): person = { 'name':name, # 昵称 'HP':HP, # 生命值 'aggr':ag ...

  9. 巨蟒python全栈开发-第16天 核能来袭-初识面向对象

    一.今日内容总览(上帝视角,大象自己进冰箱,控制时机) #转换思想(从面向过程到面向对象) 1.初识面向对象 面向过程: 一切以事物的发展流程为中心. 面向对象: 一切以对象为中心,一切皆为对象,具体 ...

随机推荐

  1. 迅为iTOP-4418/6818开发板-驱动-IO初始化配置介绍和例程

    对于所有的处理器,pad 一般可以分为两大类:IO(输入输出).Power(VDD 和GDD).类似摄像头 IO.以太网 IO.PWM 的 IO 等等,都可以统称为 IO.一个 IO,有可能能够被配置 ...

  2. 解决ajax跨域的办法,代理,cors,jsonp

    1.使用php做代理去请求第三方api接口 php是可以跨域的,我们利用ajax请求本域名中的php文件,php再去请求第三方接口文件,从而达到跨域目的. php做代理请求: ajax请求本域名php ...

  3. [加密解密]CryptoAPI简介

    CryptoAPI概述 Windows CryptoAPI是Microsoft 公司提出的安全加密应用服务框架,也是PKI推荐使用的加密 API.它提供了在Win32 环境下使用认证.编码.加密和签名 ...

  4. CVE_2012_1876堆溢出分析

    首先用windbg附加进程ie页面内容进程,!gflag +hpa添加堆尾检查,.childdbg 1允许子进程调试,然后加载POC. POC: <html> <body> & ...

  5. Misc杂项隐写题writeup

    MISC-1 提示:if you want to find the flag, this hint may be useful: the text files within each zip cons ...

  6. 【原创】大数据基础之Hadoop(3)yarn数据收集与监控

    yarn常用rest api 1 metrics # curl http://localhost:8088/ws/v1/cluster/metrics The cluster metrics reso ...

  7. (原创)cocos2dx-lua TableView官方demo分析

    本来是想看看网上的教程文章,结果看了好几篇,复制代码各种报错,有很多不存在的类和变量,根本用不了. 所以干脆自己去看官方demo,经过自己分析测试,已经大概会用了,顺便记录一下. 以下是代码,复制粘贴 ...

  8. linux ps top 命令 VSZ,RSS,TTY,STAT, VIRT,RES,SHR,DATA的含义

    VIRT:virtual memory usage 虚拟内存1.进程“需要的”虚拟内存大小,包括进程使用的库.代码.数据等2.假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而 ...

  9. Flask上下文管理源码--亲自解析一下

    前戏 偏函数 def index(a,b): return a+b # 原来的调用方法 # ret=index(1,2) # print(ret) # 偏函数--帮助开发者自动传递参数 import ...

  10. kth min_max容斥

    题解: 普通的$min-max$容斥是用来求最后出现元素的期望之类的 $kth min-max$容斥进一步解决倒数第k个出现的元素的期望 给出公式: $kthmax(S)=\sum\limits_{T ...