python12类



self 表示类里面的对象的引用 python一般不需要去解决内存管理,解释器会进行自动给回收


#类鱼类之间空格两行,前面的函数里面也是两行,类里面的方法个一行
class Cat(object):
"""
猫科动物
"""
def __init__(self,name,age,sex=None):
#一定要把没用默认值的变量写道前面
self.name = name
self.__age = age
self.sex = sex
def set_age(self,age):
"""
变更年龄
:param age: int 年龄
"""
self.__age = age
#return self.__age def show_info(self):
rest ="我叫什么{},今年{}岁,性别是{}".format(self.name,self.__age,self.sex)
print(rest)
return rest def eat(self):
print("aaa")
class Dog():
pass if __name__ == "__main__":
cat_blact = Cat("quan",11)
cat_blact.show_info()
cat_blact.eat() cat_white = Cat("zhi",12,"man")
cat_white.show_info() print(cat_white.name)
#print(cat_white.__age)#无法访问私有变量,只能通过类内函数
cat_white.name = "改变名字"
print(cat_white.name) #不是私有变量可以直接调用改变 cat_white.set_age(44)
cat_white.show_info() #类的实例是否是该类
print(isinstance(cat_white,Cat))
print(isinstance(cat_blact,Cat))
print(isinstance(cat_blact,Dog))
print(isinstance(cat_white,Dog))
jieguo:
我叫什么quan,今年11岁,性别是None
aaa
我叫什么zhi,今年12岁,性别是man
zhi
改变名字
我叫什么改变名字,今年44岁,性别是man
True
True
False
False

class BaseCat(object):
"""
猫科动物的基础类BaseCat
Tige Panda PerCat """
tag = "猫科动物"
def __init__(self,name):
self.name = name def eat(self):
"""
猫吃东西
:return:
"""
print("猫吃base") class Tiger(BaseCat):
"""
老虎类,猫科动物
"""
def eat(self):
super(Tiger,self).eat()
print("老虎吃肉") class Panda(BaseCat):
"""
熊猫也是
"""
pass class PerCat(BaseCat):
"""
家猫类
"""
def eat(self):
super(PerCat, self).eat()
print("家猫吃pet") class HuaCat(PerCat):
"""
家猫中的花猫
"""
def eat(self):
super(HuaCat, self).eat()
print("家猫吃hua") class DuanCat(PerCat):
"""
短毛
"""
def eat(self):
# print("家猫吃duan")
super(DuanCat, self).eat() if __name__ == "__main__":
cat = HuaCat("huahua")
cat.eat()
print("+++++++++++++++++++++++++++++")
#实例化duan猫
cat_d = DuanCat("duanduan")
cat_d.eat() #子类的判断:
print(issubclass(DuanCat,BaseCat))
print(issubclass(HuaCat, BaseCat))
print(issubclass(HuaCat, PerCat))
print(issubclass(HuaCat,DuanCat))

注意:
当多重继承的父类存再相同的方法时,按照继承顺序,最先寻找到的方法为执行方法,剩下的即使发现也不会执行
class BaseCat(object):
"""
猫科动物的基础类BaseCat
Tige Panda PerCat """
tag = "猫科动物"
def __init__(self,name):
self.name = name def eat(self):
"""
猫吃东西
:return:
"""
print("猫吃base") class ProtectMinxi(object):
def protect(self):
print("我是保护动物") class ProtectL(object):
def protect(self):
print("我是国家级别") class Tiger(BaseCat,ProtectMinxi,ProtectL):
"""
老虎类,猫科动物
"""
def eat(self):
super(Tiger,self).eat()
print("老虎吃肉") class Tiger1(BaseCat,ProtectL,ProtectMinxi):
"""
老虎类,猫科动物
"""
def eat(self):
super(Tiger1,self).eat()
print("老虎吃肉") if __name__ == "__main__":
tager1 = Tiger("quan")
tager1.protect() tager2 = Tiger1("zhi")
tager2.protect()
结果:
我是保护动物
我是国家级别

class BaseCat(object):
"""
猫科动物的基础类BaseCat
Tige Panda PerCat """
tag = "猫科动物"
def __init__(self,name):
self.name = name
print("Base_init") def eat(self):
"""
猫吃东西
:return:
"""
print("猫吃base") class Tiger(BaseCat):
"""
老虎类,猫科动物
"""
def __init__(self,name,color):
super(Tiger,self).__init__(name)
self.color = color
print("Tiger_init") def eat(self):
super(Tiger,self).eat()
print("老虎吃肉") def show_info(self):
print("Tiger{},{}".format(self.name,self.color)) if __name__ == "__main__":
tiger = Tiger("quan","black")
tiger.show_info() 结果:
Base_init
Tiger_init
Tigerquan,black

class PetCat(object):
def __init__(self,name,age):
"""
构造方法
:param name: 猫的名称
:param age: 猫的年龄
"""
self.name = name
self.__age = age
@property
def age(self):
return self.__age
@age.setter
def age(self,value):
if not isinstance(value,int):
print("年龄必须时整数")
return 0
if value <0 or value > 100:
print("年龄必须介于0-100之间")
return 0
self.__age = value
@property
def show_info(self):
return "我叫{0},今年{1}".format(self.name,self.age)
def __str__(self):
return "类的描述函数,可以通过直接打印类实例得到"
if __name__ == "__main__":
cat_balk = PetCat("quan",12)
cat_balk.age = 6
rest = cat_balk.show_info
print(rest)
print(cat_balk.age)
使用@property装饰器的好处是既可以保护类的封装性,又可以使用“类.属性”来对私有属性进行操作。 使用@property装饰器可以直接通过方法名来访问方法,不需要再在后面使用"()".
使用@property 直接调用 age() 方法,这样就使得该方法变成了 age 属性的 getter 方法,也就是读操作
setter 装饰器:@age.setter,可以对私有属性age的值进行写操作
deleter 装饰器: @age.deleter,可以对私有属性age的值进行删除操作
注1:另外,私有属性只能在类中使用,且不可访问,目的是保护数据的安全性,以及隐藏核心开发细节。私有属性或私有方法以两个下划线开头。 注2:面向对象有三大特性: 封装,继承,多态 父类的私有方法和私有属性,不会被子类继承
可以通过调用继承的父类的共有方法,间接的访问父类的私有方法、属性
python中用super来使子类继承父类的属性或方法

当父类对变量出现slots的限制,不能再添加新的方法和属性,再子类如果还存在其他的slots语句变量,变量会加载父类后边,
class PetCat(object):
__slots__ = ("name","age") #加入slots之后不能给实例添加属性和方法
def __init__(self,name,age):
"""
构造方法
:param name: 猫的名称
:param age: 猫的年龄
"""
self.name = name
self.age = age
@property
def show_info(self):
return "我叫{0},今年{1}".format(self.name, self.age)
def __str__(self):
return "类的描述函数,可以通过直接打印类实例得到"
class HuaCat(PetCat):
__slots__ = ("color")#不加是不能添加新的方法和属性的
pass
def eat():
print("chichi")
if __name__ == "__main__":
cat_balk = PetCat("quan",12)
rest = cat_balk.show_info
cat_white = HuaCat("zhi",12)
cat_white.color = "hei"
print(cat_white.show_info)

class Cat(object):
tag = "miao"
def __init__(self,name):
self.name = name @staticmethod
def breath():
print("fuxifuxi") def show_info(self):
print("{0}, {1}".format(self.tag,self.name)) if __name__ == "__main__":
#非实例
Cat.breath()
print("QQQQQQQQQQQQQQQQQQQQQQ")
#需要实例化调用
cat = Cat("quan")
cat.breath()
cat.show_info() jieguo :
fuxifuxi
QQQQQQQQQQQQQQQQQQQQQQ
fuxifuxi
miao, quan
class Cat(object):
tag = "miao"
def __init__(self,name):
self.name = name @staticmethod
def breath():
print("fuxifuxi") @classmethod
#后面设计系统的时候会用到的设计模式
def show_info(cls,name):
return cls(name)
# print("{0}, {1}".format(cls.tag,cls.name)) def show_info2(self):
print("{0}, {1}".format(self.tag, self.name)) if __name__ == "__main__":
cat = Cat.show_info("xiao")
cat.show_info2() 结果:
miao, xiao
python12类的更多相关文章
- Java类的继承与多态特性-入门笔记
相信对于继承和多态的概念性我就不在怎么解释啦!不管你是.Net还是Java面向对象编程都是比不缺少一堂课~~Net如此Java亦也有同样的思想成分包含其中. 继承,多态,封装是Java面向对象的3大特 ...
- C++ 可配置的类工厂
项目中常用到工厂模式,工厂模式可以把创建对象的具体细节封装到Create函数中,减少重复代码,增强可读和可维护性.传统的工厂实现如下: class Widget { public: virtual i ...
- Android请求网络共通类——Hi_博客 Android App 开发笔记
今天 ,来分享一下 ,一个博客App的开发过程,以前也没开发过这种类型App 的经验,求大神们轻点喷. 首先我们要创建一个Andriod 项目 因为要从网络请求数据所以我们先来一个请求网络的共通类. ...
- ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库
在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...
- ASP.NET Core 折腾笔记二:自己写个完整的Cache缓存类来支持.NET Core
背景: 1:.NET Core 已经没System.Web,也木有了HttpRuntime.Cache,因此,该空间下Cache也木有了. 2:.NET Core 有新的Memory Cache提供, ...
- .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类
.NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类 0x00 为什么要引入扩展方法 有的中间件功能比较简单,有的则比较复杂,并且依赖其它组件.除 ...
- Java基础Map接口+Collections工具类
1.Map中我们主要讲两个接口 HashMap 与 LinkedHashMap (1)其中LinkedHashMap是有序的 怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...
- PHP-解析验证码类--学习笔记
1.开始 在 网上看到使用PHP写的ValidateCode生成验证码码类,感觉不错,特拿来分析学习一下. 2.类图 3.验证码类部分代码 3.1 定义变量 //随机因子 private $char ...
- C# 多种方式发送邮件(附帮助类)
因项目业务需要,需要做一个发送邮件功能,查了下资料,整了整,汇总如下,亲测可用- QQ邮箱发送邮件 #region 发送邮箱 try { MailMessage mail = new MailMess ...
随机推荐
- the Agiles Scrum Meeting 1
会议时间:2020.4.9 20:00 1.每个人的工作 今天已完成的工作 前端 学习JavaScript.Vue.ElementUI相关知识 issues:预习任务-前端:JavaScript 预习 ...
- 【二食堂】Beta - Scrum Meeting 6
Scrum Meeting 6 例会时间:5.19 18:30~18:50 进度情况 组员 当前进度 今日任务 李健 1. 实体标注的优化基本已经实现,后端有bug,还没有进行接口调用 issue 2 ...
- Prometheus的单机部署
Prometheus的单机部署 一.什么是Prometheus 二.Prometheus的特性 三.支持的指标类型 1.Counter 计数器 2.Gauge 仪表盘 3.Histogram 直方图 ...
- NB-IoT的DRX、eDRX、PSM三个模式怎么用?通俗解释,看完就懂!
面我们讲了不少NB-IOT的应用.软件和硬件设计的变动. (链接在文章末尾). 今天讲讲NB-IoT的三大模式,在各种物联网和智能硬件场景中的使用方法 DRX.eDRx.PSM是什么? DRX虽然叫做 ...
- 计算机网络之网络层路由选择协议(自治系统AS、RIP、OSPF、BGP)
文章转自:https://blog.csdn.net/weixin_43914604/article/details/105313629 学习课程:<2019王道考研计算机网络> 学习目的 ...
- hdu 1394 Minimum Inversion Number(线段树or树状数组)
题意: 给你N个数,N个数是0~N-1的一个全排列. 要求统计它的所有形式的逆序对的最小值.它的所有形式的意思是,不断将数组开头的第一个数放到数组的最后面. 逆序对:i<j且ai>aj 思 ...
- 『学了就忘』Linux基础命令 — 24、文件基本权限的相关命令
目录 1.chmod命令 2.权限模式 (1)用户身份. (2)赋予方式. (3)权限. 3.数字权限 4.文件常用权限 5.chown命令 6.chgrp命令 7.总结 常用基本权限操作命令: ch ...
- Spring Data Redis Stream的使用
一.背景 Stream类型是 redis5之后新增的类型,在这篇文章中,我们实现使用Spring boot data redis来消费Redis Stream中的数据.实现独立消费和消费组消费. 二. ...
- Java 8 新特性 用 Collectors 对 List 去重
场景:有一个实体的List集合,需要根据实体中的某个字段对List去重 Collectors.collectingAndThen方法:将流中的数据通过Collector计算,计算的结果再通过Funct ...
- 【linux系统】命令学习(二)文件处理命令
查看帮助 1.--help 例如:ls --help 会有中文 2.man 例如:man ls 都是英文 进入手册的界面 空格键:向下翻页 回车:一行一行翻页 B:向前翻页 ...