面向对象编程
类的概念 : 具有相同属性和技能的一类事物
    人类 抽象
对象 : 就是对一个类的具体的描述
    具体的人 具体 使用面向对象的好处:
使得代码之间的角色关系更加明确
增强了代码的可扩展性
规范了对象的属性和技能
面向对象的特点:结局的不确定性
    self = {'name': name, 'sex':sex, 'hp': hp, 'ad': ad}
def attack(dog): # 闭包
# 人攻击狗
print('%s攻击%s' % (self['name'], dog['name']))
# 狗掉血,狗的血量-人的攻击力
dog['hp'] -= self['ad']
self['attack'] = attack
return self def Dog(name,kind,hp,ad):
# 狗模子
self = {'name': name, 'kind':kind, 'hp': hp, 'ad': ad}
def bite(person):
print('%s咬了%s' % (self['name'], person['name']))
# 人掉血,人的血量-狗的攻击力
person['hp'] -= self['ad']
if person['hp'] <= 0: print('game over,%s win' % self['name'])
def bite2():pass
self['bite'] = bite
self['bite2

  

创建一个类

class Person:
role = 'person' # 静态属性
def f1(self): # 动态属性 方法(函数) 默认带一个参数self

  

查看静态变量的第一种方式

print(Person.__dict__)   # 内置的双下方法
print(Person.__dict__['role'])
Person.__dict__['role'] = 456 # 报错
print(Person.__dict__['role'])

  

查看静态变量的第二种方式

print(Person.静态变量)   # 123 值
print(Person.role)
Person.静态变量 = 456
Person.role = 456
print(Person.静态变量)#456 del Person.静态变量
print(Person.__dict__)

  

类名

    引用静态变量
1.类名.__dict__['静态变量名'] 可以查看,但是不能删改
2.类名.静态变量名 直接就可以访问,可以删改
删除一个静态变量 del 类名.静态变量名
引用动态变量
1.类名.方法名 查看这个方法的内存地址
1.类名.方法名(实参) 调用了这个方法,必须传一个实参,这个实参传给了self
创造一个对象 - 实例化
产生一个实例(对象)的过程
对象 = 类名()
alex = Person() # 创造一个对象
alex 是对象、实例
Person是类
对象 = 类名()
class Person:
role = 'person' # 静态属性
def __init__(self,name,sex,hp,ad):
self.name = name # 对象属性 属性
self.sex = sex
self.hp = hp
self.ad = ad
def attack(self):
print('%s发起了一次攻击'%self.name) alex = Person('a_sb','不详',1,5)
boss_jin = Person('金老板','女',20,50) alex.attack() # Person.attack(alex)
boss_jin.attack() # Person.attack(boss_jin)

 

实例化 :创造一个对象的过程:实例化

实例化的过程:
1.创造一个实例,将会作为一个实际参数 # python
2.自动触发一个__init__的方法,并且把实例以参数的形式传递给__init__方法中的self形参
3.执行完__init__方法之后,会将self自动返回给alex
__init__方法 :初始化方法,给一个对象添加一些基础属性的方法,一般情况下是针对self的赋值
对象
在类的内部 self是本类的一个对象
在类的外部,每一个对象都对应着一个名字,这个对象指向一个对象的内存空间
属性的调用:
对象名.属性名 第一种调用方法
对象名.__dict__['属性名'] 第二种调用方法
方法的调用 :
类名.方法名(对象名) # 那么方法中的self参数就指向这个对象
对象名.方法名() # 这样写 相当于 方法中的self参数直接指向这个对象

面向对象:交互

class Person:
role = 'person' # 静态属性
def __init__(self,name,sex,hp,ad):
self.name = name # 对象属性 属性
self.sex = sex
self.hp = hp #血量
self.ad = ad #攻击力
def attack(self,d):
d.hp -= self.ad
print('%s攻击了%s,%s掉了%s点血'%(self.name,d.name,d.name,self.ad)) class Dog:
def __init__(self,name,kind,hp,ad):
self.name = name
self.kind = kind
self.hp = hp
self.ad = ad
def bite(self,p):
p.hp -= self.ad
print('%s咬了%s一口,%s掉了%s点血' % (self.name, p.name, p.name, self.ad)) alex = Person('a_sb','不详',1,5)
boss_jin = Person('金老板','女',20,50)
teddy = Dog('笨笨','teddy',50,10)
teddy.bite(alex)
print(alex.hp)
boss_jin.attack(teddy)
print(teddy.hp)

  


命名空间和作用域
class Person:
role = 'person' # 静态属性
def __init__(self,name,sex,hp,ad):
self.name = name # 对象属性 属性
self.sex = sex
self.hp = hp
self.ad = ad
def attack(self):
self.hobby = 'girl'
print('%s发起了一次攻击'%self.name) alex = Person('a_sb','不详',1,5)
alex.attack() # Person.attack(alex)
alex.age = 81
# alex --> Person
# Person实例化了alex
print(alex.__dict__)

alex.name #alex 指向我自己的内存空间 在自己的内存空间里找到name
alex.attack #alex 先找自己的内存空间 再找到类对象指针 再根据类对象指针找到类 再通过类找到attack
对象的内存空间里: 只存储对象的属性,而不存储方法和静态属性
方法和静态属性都存储在类的内存空间中
为了节省内存,让多个对象去共享类中的资源

命名空间和作用域

写一个类 完成一个功能 : 可以统计这个类有几个对象
class Foo:
count = 0
def __init__(self):
Foo.count += 1
f1 = Foo()
f2 = Foo()
f3 = Foo()
f4 = Foo()
f5 = Foo()
print(Foo.count) #

  

1.

class Life:
money = 10
def __init__(self,name):
self.name = name
def work(self):
print(self.name,'工作,赚了1000块钱')
# print(self.__dict__)
# print(Life.money)
# print(self.money)
self.money += 1000
father = Life('father')#father 工作,赚了1000块钱/
father.work()
print(father.money)
mother = Life('mother')
mother.work()
print(mother.money)
print(father.money)
# father.money = 10
print(father.__dict__)#{'money': 1010, 'name': 'father'}
print(Life.money)# 在对象的空间中新创建了一个字典self.money += 1000

  

2.

class Live:
money = [1]
def __init__(self,name):
self.name = name
def work(self):
print(self.name,'工作赚了1000块钱')
# print(self.money)
self.money[0] +=1000
father2 = Live('father2')
mother2 = Live('mother2')
father2.work()
mother2.work()
print(mother2.__dict__)#{'name': 'mother2'}
print(father2.money)
print(mother2.money)#[2001]
print(Live.money)#[2001]
print(Live.__dict__['money']) 由于传递的是可变类型的元素的改变,所以导致live.money的元素也发生改变

  3.

class Live2:
money= [0]
def __init__(self,name):
self.name = name
def work(self):
print(self.name,'工作赚了1000块钱')
Live2.money = [Live2.money[0]+1000] father3 = Live2('father3')
mother3 = Live2('mother3')
mother3.work()
father3.work()
print(father3.__dict__)
print(Live2.money)

  

兑现属性是独有的,静态属性和方法是共享的
对象使用名字,先找自己内存空间中的,再找类的内存空间的
类名.静态变量;对于静态属性的修改,应该使用类名直接修改 面向对象实例
# 圆
# 计算圆的周长 2 pi r
# 计算圆的面积 pi r**2
# 5个圆
# 1,3,5,7,9
from math import pi
class Circle:
def __init__(self,r):
self.r = r
def cal_area(self):
'''
计算圆面积的方法
:return:返回值是float数据类型的面积
'''
return pi*self.r**2
def cal_perimeter(self):
'''
计算圆周长的方法
:return:返回值是float数据类型的周长
'''
return pi * self.r * 2
for i in range(1,10,2):
c1 = Circle(i)
print(c1.cal_area())
print(c1.cal_perimeter())

  

 

  


python:面向对象初级的更多相关文章

  1. python 面向对象初级篇

    Python 面向对象(初级篇) 概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发" ...

  2. python面向对象初级(七)

    概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发“更快更好更强...” 面向过程编程最易被初学 ...

  3. python 面向对象 初级

    面向对象 与 面向过程 面向对象对象,是根据某个对象,进行编写对象属性,不考虑对象以外的因素,只对对象本事的一些属于自己的属性进行创造,不用考虑 业务之间的逻辑. 面向过程, 是按照业务的一步步发展进 ...

  4. python面向对象进阶(八)

    上一篇<Python 面向对象初级(七)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...

  5. python 面向对象(三大特性)

    python 面向对象(初级) (思维导图 ↑↑↑↑↑) 概述: 面向过程:根据业务逻辑从上到下垒代码. 函数式:将某功能代码封装至函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类 ...

  6. python 高级之面向对象初级

    python 高级之面向对象初级 本节内容 类的创建 类的构造方法 面向对象之封装 面向对象之继承 面向对象之多态 面向对象之成员 property 1.类的创建 面向对象:对函数进行分类和封装,让开 ...

  7. Python 面向对象(初级篇)

    51CTO同步发布地址:http://3060674.blog.51cto.com/3050674/1689163 概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后 ...

  8. Python 面向对象(初级篇) (转)

    概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发"更快更好更强..." 面 ...

  9. 第四篇:python 高级之面向对象初级

    python 高级之面向对象初级   python 高级之面向对象初级 本节内容 类的创建 类的构造方法 面向对象之封装 面向对象之继承 面向对象之多态 面向对象之成员 property 1.类的创建 ...

  10. Python开发【第七篇】:面向对象 和 python面向对象(初级篇)(上)

    Python 面向对象(初级篇)   51CTO同步发布地址:http://3060674.blog.51cto.com/3050674/1689163 概述 面向过程:根据业务逻辑从上到下写垒代码 ...

随机推荐

  1. Tomcat 加腾讯云 实现二级域名访问

    搬家这个时间段不能用,从原网站https://blog.csdn.net/qq_36570464/article/details/86157394 截图过来的.也是自己写的. Tomcat 加腾讯云实 ...

  2. Python 常见字符串常量和表达式

    常见字符串常量和表达式 操作 解释 s = '' 空字符串 s = "spam's" 双引号和单引号相同 S = 's\np\ta\x00m' 转义序列 s = "&qu ...

  3. Neural Network Programming - Deep Learning with PyTorch - YouTube

    百度云链接: 链接:https://pan.baidu.com/s/1xU-CxXGCvV6o5Sksryj3fA 提取码:gawn

  4. datafactory5.6向mysql5.7添加大量测试数据

    1.下载安装datafactory5.6 2.下载安装mysql5.7,并创建数据库guest_test和表sign_event 3.下载安装odbc5.3 4.打开datafactory配置数据源, ...

  5. CSS3实现Loading动画特效

    查看效果:http://hovertree.com/texiao/css3/43/ 代码如下: <!DOCTYPE html> <html> <head> < ...

  6. JVM学习三:静态分派

    所有依赖静态类型来定位方法的执行版本的分派动作成为静态分派,静态分派典型的应用场景是方法的重载.在编译阶段,javac编译器会根据参数的静态类型决定使用哪个重载版本,但很多种情况下这个版本并不是“唯一 ...

  7. Feign get接口传输对象引发一场追寻

    一个报错引发的追寻之路: Feign get接口传输对象,调用方接口代码: @FeignClient(name = "manage") public interface Acces ...

  8. MVC中调用模态框之后导致JS失效

    今天在工作中碰到一个页面调用模态框之后,页面原来的JS失效的问题,由于前台经验较少,折腾了一天... 问题描述是这样,在页面,有两个下拉列表框A和B,做了下拉列表框联动,有一个button按钮会调用模 ...

  9. Kali Linux Web后门工具、Windows操作系统痕迹清除方法

    Kali Linux Web后门工具 Kali的web后门工具一共有四款,今天只介绍WebaCoo 首先介绍第一个WeBaCoo(Web Backdoor Cookie) WeBaCoo是一款隐蔽的脚 ...

  10. Java scirpt简介

    JavaScript 简介 JavaScript 是脚本语言 JavaScript 是一种轻量级的编程语言. JavaScript 是可插入 HTML 页面的编程代码. JavaScript 插入 H ...