类,对象:

  类 具有相似功能的一类事物,人类,犬类,猫类等等。

对象: 类的具体表现

面向对象:

 1、第一个优点:面向对象是一类相似功能函数的集合体

   更清晰化,更规范化

class LoginHandler:  # 登录和注册归属于一类  (calss 驼峰体 结构)
def login(self):
pass
def regisgter(self):
pass
class ShoppingCar:   # 购物车归为一类,含有购物,已购买信息,未购买信息等功能
def shopping(username, money):
pass
def check_paidgoods(username, money):
pass
def check_unpaidgoods(username, money):
pass

ShoppingCar

 2、面向对象,必须要站在上帝角度,去考虑问题

  类其实就是一个公共模板,对象就从具体的模块实例化出来

面向对象的结构:

'''

class 类名():             # 首字母大写,驼峰体,括号可写可不写

  变量部分

  函数(方法)

'''

class Human():
'''
此类主要是定义人类
'''
mind = '有思想' # 静态属性 属性 静态变量 静态字段
language = '会使用语言'
def __init__(self,name,sex,age): # 方法, 函数,动态属性
self.n = name
self.s = sex
self.a = age
def work(self):
print('人类会工作')
def tools(self):
self.color = 'blue'
print('人类会使用工具')
print(Human) # <class '__main__.Human'>

定义一个类

类名:

 类名操作类中的静态属性

  第一种: 类名.__dict__ 方式,查看类中所有内容

print(Human.__dict__)
print(Human.__dict__['mind'])
Human.__dict__['mind'] = '无脑' # 修改无效
print(Human.__dict__)

  第二种:万能的. 可以增删改查类中的静态属性

print(Human.mind)  # 查
Human.mind = '无脑' # 改
print(Human.mind)
del Human.mind # 删
Human.walk = '直立行走'
print(Human.walk)

类名操作类中的方法(除去特殊方法:静态方法,类方法之外,一般不会通过类名执行类中的方法)

对象:

 什么是对象

  只要类名() 这个就是一个实例化过程,就会产生一个对象

obj = Human()

实例化一个对象到底经历了哪些事情?

1、产生一个对象空间。

print(obj)  # <__main__.Human object at 0x0000019BC6A0F828>

2、自动执行类中的__init__方法(init函数)并且将这个对象空间传给self

3、在__init__中通过self给这个空间添加属性,并且返回

 对象操作对象空间的属性

obj = Human('小胖', '男', 20)

  #1、 obj.__dict__ 查询对象中所有的属性

print(obj.__dict__)

  #2、 通过万能的. 的方式操作对象中的单个属性

# 增 删 改 查
obj = Human('echo', 'male', 26)
obj.job = 'IT' # 增
# print(obj.__dict__)
# del obj.job # 删
# print(obj.__dict__)
# obj.s = 'woman' # 改
# print(obj.__dict__)
print(obj.s) # 查

  #3、对象可以查询类中的属性

print(obj.mind)
print(obj.language)
obj.a = 666
print(obj.a)

  4、对象可以执行类中的方法

   对象执行类中的所有方法(除去3个特殊方法)Python解释器都会将对象空间主动传给方法的第一个参数self

obj.work()

self:类中方法的第一个形参约定俗成写self,便于统一,self接受的就是对象空间

多个对象:

xiaopang = Human('小胖', '男', 20)
xiangye = Human('相爷', '男', 18)
print(xiangye,xiaopang) # <__main__.Human object at 0x00000223FE0E8B38> <__main__.Human object at 0x00000223FE0E8B00>
print(xiaopang.__dict__) # {'n': '小胖', 's': '男', 'a': 20}
print(xiangye.__dict__) # {'n': '相爷', 's': '男', 'a': 18}

day 18 类,对象的更多相关文章

  1. 18.Java 封装详解/多态详解/类对象转型详解

    封装概述 简述 封装是面向对象的三大特征之一. 封装优点 提高代码的安全性. 提高代码的复用性. "高内聚":封装细节,便于修改内部代码,提高可维护性. "低耦合&quo ...

  2. Python全栈--9.1--面向对象进阶-super 类对象成员--类属性- 私有属性 查找源码类对象步骤 类特殊成员 isinstance issubclass 异常处理

    上一篇文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象 ...

  3. C++中派生类对象的内存布局

    主要从三个方面来讲: 1 单一继承 2 多重继承 3 虚拟继承 1 单一继承 (1)派生类完全拥有基类的内存布局,并保证其完整性. 派生类可以看作是完整的基类的Object再加上派生类自己的Objec ...

  4. java 获取实体类对象属性值的方法

    在java中我们要获得实体类对象的属性,一般情况是将实体类中的属性私有化,然后再对外提供get()与set()方法,然后再获取实体类对象的属性的时候先把对象new出来,再用变量名.get()的方法得到 ...

  5. 基类中定义的虚函数在派生类中重新定义时,其函数原型,包括返回类型、函数名、参数个数、参数类型及参数的先后顺序,都必须与基类中的原型完全相同 but------> 可以返回派生类对象的引用或指针

      您查询的关键词是:c++primer习题15.25 以下是该网页在北京时间 2016年07月15日 02:57:08 的快照: 如果打开速度慢,可以尝试快速版:如果想更新或删除快照,可以投诉快照. ...

  6. 用cglib包来为类产生动态代理类对象

    一:在JDK里也有动态代理的类和接口,是Proxy和InvocationHandler,但是Proxy只能为接口产生代理类,借助InvocationHandler的实现类来完成对类对象的代理: 但是在 ...

  7. 对C++对象内存模型造成的影响(类/对象的大小)

    首先重新回顾一下关于类/对象大小的计算原则: 类大小计算遵循结构体对齐原则 第一个数据成员放在offset为0的位置 其它成员对齐至min(sizeof(member),#pragma pack(n) ...

  8. static 成员变量、static 成员函数、类/对象的大小

    一.static 成员变量 对于特定类型的全体对象而言,有时候可能需要访问一个全局的变量.比如说统计某种类型对象已创建的数量. 如果我们用全局变量会破坏数据的封装,一般的用户代码都可以修改这个全局变量 ...

  9. python基础-9.1 面向对象进阶 super 类对象成员 类属性 私有属性 查找源码类对象步骤 类特殊成员 isinstance issubclass 异常处理

    上一篇文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象 ...

  10. C++ 类对象和 指针的区别

    C++ 类对象和 指针的区别 C++ 类对象和 指针的区别 转自:http://blog.csdn.net/ym19860303/article/details/8557746 指针的情况 class ...

随机推荐

  1. 查看已打包app的entitlements文件内容

    执行以下命令: codesign -d --ent :- /path/to/the.app https://developer.apple.com/library/content/technotes/ ...

  2. Think you can pronounce these 10 words correctly? You might be

    Think you can pronounce these 10 words correctly?  You might be surprised! Share Tweet Share Tagged ...

  3. 解决mysql从windows迁移到centos出现乱码问题

    windows上的数据库编码情况 修改前centos上的编码情况 修改centos上mysql的配置文件my.cnf如下(修改前停掉mysql服务,/etc/init.d/mysqld stop) 红 ...

  4. [PHP]PHP缓存机制之Output Control

    ---------------------------------------------------------------------------------------------------- ...

  5. vscode vue 格式化 和emmet 提示

    ctrl+shift+p打开用户默认设置 设置vetur插件 "vetur.validation.template": false, "vetur.format.defa ...

  6. Android DevArt6:Android中IPC的六种方式

    Android中IPC的六种方式 1.使用Bundle 最简单的进程间通信方式:Intent + Bundle: 支持三大组件:Activity.Service.BroadcastReceiver : ...

  7. JAVAWEB 一一 框架整合(SSH,Spring+Struts2+Hibernate IOC/DI AOP声明式事务处理 定时任务)

    package org.springframework.orm.hibernate3; import java.io.Serializable; import java.util.List; impo ...

  8. overload重载

    方法的重载 /** * 重载 overload * @author Administrator *同一个类,同一个方法 *不同:参数列表不同(类型,个数,顺序) 只和 参数列表有关 * 跟 返回值 和 ...

  9. ORACLE数据库 常用命令和Sql常用语句

    ORACLE 账号相关 如何获取表及权限 1.COPY表空间backup scottexp登录管理员账号system2.创建用户 create user han identified(认证) by m ...

  10. webservice调用dll

    今天客户那里报出来,ws通讯不成功.但是在本机和windows2003上都可以测试成功.WS的页面(asmx)可以出来,但是点击接口方法,调用就报http500错误.   网站无法显示该页面  HTT ...