构造,封装:

#面向对象的特征:封装,继承,多态#初阶
class dog:def __init__(self,name):self.name = namedef bulk(self):print("%s:wangwangwang!"%self.name)d1 = dog("vergil")
d2 = dog("tanying")
d1.bulk()
d2.bulk()#进阶
eq_menu = {"自动手枪":{"USP":800,"GLOCK18":1600,"NightEagle":2000,"P228":1800,"Eltie":2200},"微型冲锋枪":{"M3":2500,"XM1014":2000,"MP5":1800,"TMP":2500}
}#class role:####################################################################经典类
class role(object):#############################################################新式类pre_money = 10000###########################################################类变量def __init__(self, name, sex, equipment="NA"):##############################实例化self.name = name########################################################实例变量self.sex = sexself.__money_left = 10000###############################################封装,只可访问,只可用类的方法改变,不可用调用的方式改变self.life_left = 100self.equipment = equipmentdef __del__(self):##########################################################析构函数print("Mission complited!!!")############################################################################################类的方法def kill_bonus(self):print("%s has killed someone"%self.name)self.__money_left += 800print(self.__money_left)def buy_gun(self):print("money is %s left!"%self.__money_left)exit_flag = Falsewhile not exit_flag:for i in eq_menu:print(i)choice1 = input("which type of gun you want to buy?q for exit")if choice1 in eq_menu:while not exit_flag:for i in eq_menu[choice1]:print(i)choice2 = input("which gun you want to buy?b for back,q for exit")if choice2 in eq_menu[choice1]:self.__money_left -= eq_menu[choice1][choice2]self.equipment = choice2exit_flag = Trueprint("%s has bought a %s,%s money left!"%(self.name,self.equipment,self.__money_left))elif choice2 == "b":breakelif choice2 == "q":exit_flag = Trueelse:print("wrong input!")elif choice1 == "q":exit_flag = Trueelse:print("wrong input!")###############################################################################类的继承
class police(role):def rescu(self):role.kill_bonus(self)print("%s has rescued a people"%self.name)vergil = police("vergil","male")
vergil.kill_bonus()
vergil.rescu()################################################################################重构
class terriost(role):def __init__(self,name,sex,power):#role.__init__(self,name,sex)###########################################经典类super(terriost,self).__init__(name,sex)#################################新式类self.power = powerdef kill(self):role.kill_bonus(self)print("%s's power is %s"%(self.name,self.power))danti = terriost("danti","male",100)
danti.kill_bonus()
danti.kill()

继承:

##########################################先执行子类,再执行父类
##########################################对于新式类,多继承,从左边父类先执行,再执行右边的父类
class role(object):def __init__(self,name,age):self.name = nameself.age = ageself.friend = []def study(self):passclass relation(object):def make_friend(self,obj):print("in the relation")print("%s is making friend with %s"%(self.name,obj.name))self.friend.append(obj)class man(role,relation):print("in the man")vergil = man("vergil","male")
danti = man("danti","male")
vergil.make_friend(danti)danti.name = "halo"
print(vergil.friend[0].name)
####改名也适用

多态:

class Animal(object):def __init__(self, name):self.name = name@staticmethoddef animal_talk(obj):obj.talk()class Cat(Animal):def talk(self):print('Meow!')class Dog(Animal):def talk(self):print('Woof! Woof!')d = Dog("vergil")
c = Cat("danti")Animal.animal_talk(c)
Animal.animal_talk(d)

静态方法:

class Animal(object):def __init__(self, name):self.name = name@staticmethod###########################静态方法,名义上还属于类的方法,实际上调用已经与类不相关了def animal_talk(self):print("%s wangwang!"%self)c = Animal("vergil")
c.animal_talk("danti")

类方法:

class role(object):age = 25def __init__(self,name):self.name = name@classmethod#############################################################只会引用类变量,引用实例变量会报错def marriage(self,name):print("%s marriage someone at %s years old"%(name,self.age))a = role("vergil")
a.marriage("vergil")

属性方法:

class role(object):age = 25def __init__(self,name):self.name = nameself.__food = "NA"@property#############################################################把一个方法变成一个静态属性def eat(self):print("in the eat")print("eat the %s"%self.__food)@eat.setterdef eat(self,food):print("set the %s to food"%food)self.__food = food@eat.deleterdef eat(self):del self.__foodprint("food has been deleted")a = role("vergil")
a.eat
a.eat = "baozi"
a.eat
del a.eat
a.eat

函数转类:

def func(self):print('hello %s' %self.name)
def __init__(self,name,age):self.name = nameself.age = age
Foo = type('Foo', (object,), {'talk': func,'__init__':__init__})
f = Foo("Chrn",22)
f.talk()
print(type(Foo))

类的特殊使用方法:

class Foo(object):def __init__(self):self.data = {}def __getitem__(self, key):print('__getitem__', key)return self.data.get(key)def __setitem__(self, key, value):print('__setitem__', key, value)self.data[key] =valuedef __delitem__(self, key):print('__delitem__', key)
obj = Foo()
obj['name'] = "alex"
print(obj['name'])
print(obj.data)
del obj["sdfdsf"]
result = obj['k1']  # 自动触发执行 __getitem__
obj['k2'] = 'alex'  # 自动触发执行 __setitem__
del obj['k1']
class Dog(object):'''这个类是描述狗这个对象的'''def __init__(self,name):self.name = nameself.__food = None#@classmethod@property #attributedef eat(self):print("%s is eating %s" %(self.name,self.__food))@eat.setterdef eat(self,food):print("set to food:",food)self.__food = food@eat.deleterdef eat(self):del self.__foodprint("删完了")def talk(self):print("%s is talking"% self.name)def __call__(self, *args, **kwargs):print("running call",args,kwargs)def __str__(self):return "<obj:%s>" %self.name
#print(Dog.__dict__) #打印类里的所有属性,不包括实例属性
d = Dog("ChenRonghua")
print(d)
# print(d.__dict__) #打印所有实例属性,不包括类属性
# d(1,2,3,name=333)
#Dog("ChenRonghua")()######################################################输出所处的类#############################################
from lib.aa import C
obj = C()
print(obj.__module__)  # 输出 lib.aa,即:输出模块
print(obj.__class__ )     # 输出 lib.aa.C,即:输出类#######################################################metaclass##############################################
class MyType(type):def __init__(self, what, bases=None, dict=None):print("--MyType init---")super(MyType, self).__init__(what, bases, dict)def __call__(self, *args, **kwargs):print("--MyType call---")obj = self.__new__(self, *args, **kwargs)obj.data = {"name":111}self.__init__(obj, *args, **kwargs)
class Foo(object):__metaclass__ = MyTypedef __init__(self, name):self.name = nameprint("Foo ---init__")def __new__(cls, *args, **kwargs):print("Foo --new--")#print(object.__new__(cls))return object.__new__(cls) #继承父亲的__new__方法# 第一阶段:解释器从上到下执行代码创建Foo类
# 第二阶段:通过Foo类创建obj对象
obj = Foo("Alex")
print(obj.name)

python-面向对象的编程相关推荐

  1. 【Python进阶】实战Python面向对象基本编程

    欢迎来到专栏<Python进阶>.在这个专栏中,我们会讲述Python的各种进阶操作,包括Python对文件.数据的处理,Python各种好用的库如NumPy.Scipy.Matplotl ...

  2. Python面向对象的编程

    提示:本文代码完全来源于哔哩哔哩<10小时搞定Python面向对象(完整版)>,本文用途仅限于Python编程的学习. 网址:https://www.bilibili.com/video/ ...

  3. python面向对象的编程_python面向对象的编程

    创建类和对象 面向对象编程是一种编程方式,此编程方式的落地需要使用 "类" 和 "对象" 来实现,所以,面向对象编程其实就是对 "类" 和 ...

  4. 神经网络与深度学习——TensorFlow2.0实战(笔记)(四)(Python面向对象的编程)

    面向对象的程序设计(OOP) 对象(object): 将属性和方 法封装在一起. 类(class): 具有相同的属性和方法的对象集合. 对象是类的实例 子类继承了父类的全部属性和方法, 并且也有自己特 ...

  5. Python 面向对象高级编程——定制类

    1.1   定制类 1.1.1   __str__ >>> class Student(object): ...    def __init__(self, name): ...   ...

  6. Python面向对象高级编程

    1.__slots__ 通过Types包中的MethodType将外部方法与类对象进行绑定(该方法只能对绑定的对象生效) """a test module"&q ...

  7. python面向对象OOP编程(三)-- 同类 不同实例 之间的关联关系

    当一个类有多个实例,但是在实例之间有着相互的关联关系,此时,不建议在实例中新增一个成员属性来描述这种关联关系 据一个实际场景来帮助理解:People类有两个实例:AA和BB,AA是男的,BB 是女的, ...

  8. python笔记2(函数 面向对象 文件编程 上下文管理器)

    记录python听课笔记 文章目录 记录python听课笔记 一,函数 1.介绍python里的函数 2.用户自定义函数 3.变量的作用域 4.参数的传递 5.参数的默认值 6.向函数内部批量传递数据 ...

  9. Python学习笔记:面向对象高级编程(完)

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  10. Python学习笔记:面向对象高级编程(中下)

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

最新文章

  1. 51单片机创建工程操作流程
  2. 关于jquery与dom元素转换
  3. 自动备份html文件,windows下定期自动备份本地文件(文件夹)
  4. 由浅到深理解ROS(1)
  5. spring boot 配置文件加密数据库用户名/密码
  6. 解决fatal: unable to connect to github.com问题
  7. Netgear业务交换机被曝15个漏洞,有些不修复
  8. python生成的字符画怎么查看_通过python将图片生成字符画
  9. 云网络开山之作,揭秘云上高速公路的十年技术成果!
  10. java命令_java常用命令javac、javap、jps、jstack
  11. 单库单服解决方案terraform部署实践
  12. 【ShaderLab学习】AlphaTest AlphaBlend理解[1]
  13. [高通SDM450][Android9.0]CTA认证--去掉通话记录功能
  14. 让gentoo安装不再难
  15. apollo之集群部署(二)
  16. 青蛙过河 猴子爬山 兔子繁殖 开宝箱2 找气球 指针函数 铺地砖
  17. PDF如何提取其中一页,PDF提取页面的方法
  18. 小米一直显示在android,小米三刷机失败!开机一直显示power by android
  19. 去中心化的联邦图神经网络
  20. Kafka kafka-reassign-partitions.sh 命令使用

热门文章

  1. FFS(快速文件系统)–Unix文件系统
  2. 两张表格数据匹配删除
  3. Python的Mann-Kendall非参数检验和计算Hurst指数
  4. Tomcat启动项目出现 javax.el.ELException
  5. 用ps提取彩色图像的线稿
  6. domino服务器打开邮件,Domino邮件服务器配置(接收、发送).doc
  7. CAD绘图时怎么查看所绘制图形两点间的距离?
  8. C#,CAD二次开发,基于参考面参考点计算一个点的坐标
  9. 使用 JavaScript 添加时间
  10. 未来10年什么行业发展比较好?