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类的更多相关文章

  1. Java类的继承与多态特性-入门笔记

    相信对于继承和多态的概念性我就不在怎么解释啦!不管你是.Net还是Java面向对象编程都是比不缺少一堂课~~Net如此Java亦也有同样的思想成分包含其中. 继承,多态,封装是Java面向对象的3大特 ...

  2. C++ 可配置的类工厂

    项目中常用到工厂模式,工厂模式可以把创建对象的具体细节封装到Create函数中,减少重复代码,增强可读和可维护性.传统的工厂实现如下: class Widget { public: virtual i ...

  3. Android请求网络共通类——Hi_博客 Android App 开发笔记

    今天 ,来分享一下 ,一个博客App的开发过程,以前也没开发过这种类型App 的经验,求大神们轻点喷. 首先我们要创建一个Andriod 项目 因为要从网络请求数据所以我们先来一个请求网络的共通类. ...

  4. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库

    在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...

  5. ASP.NET Core 折腾笔记二:自己写个完整的Cache缓存类来支持.NET Core

    背景: 1:.NET Core 已经没System.Web,也木有了HttpRuntime.Cache,因此,该空间下Cache也木有了. 2:.NET Core 有新的Memory Cache提供, ...

  6. .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类

    .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类 0x00 为什么要引入扩展方法 有的中间件功能比较简单,有的则比较复杂,并且依赖其它组件.除 ...

  7. Java基础Map接口+Collections工具类

    1.Map中我们主要讲两个接口 HashMap  与   LinkedHashMap (1)其中LinkedHashMap是有序的  怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...

  8. PHP-解析验证码类--学习笔记

    1.开始 在 网上看到使用PHP写的ValidateCode生成验证码码类,感觉不错,特拿来分析学习一下. 2.类图 3.验证码类部分代码 3.1  定义变量 //随机因子 private $char ...

  9. C# 多种方式发送邮件(附帮助类)

    因项目业务需要,需要做一个发送邮件功能,查了下资料,整了整,汇总如下,亲测可用- QQ邮箱发送邮件 #region 发送邮箱 try { MailMessage mail = new MailMess ...

随机推荐

  1. Redis:学习笔记-03

    Redis:学习笔记-03 该部分内容,参考了 bilibili 上讲解 Redis 中,观看数最多的课程 Redis最新超详细版教程通俗易懂,来自 UP主 遇见狂神说 7. Redis配置文件 启动 ...

  2. 第六次Alpha Scrum Meeting

    本次会议为Alpha阶段第六次Scrum Meeting会议 会议概要 会议时间:2021年5月2日 会议地点:线上会议 会议时长:20min 会议内容简介:本次会议主要由每个人展示自己目前完成的工作 ...

  3. Sharding-JDBC自定义复合分片算法

    Sharding-JDBC自定义复合分片算法 一.背景 二.需求 1.对于客户端操作而言 2.对于运营端操作而言 三.分片算法 1.客户id和订单id的生成规则 2. 确定数据落在那个表中 3.举例说 ...

  4. Noip模拟32(再度翻车) 2021.8.7

    T1 Smooth 很水的一道题...可是最傻    的是考场上居然没有想到用优先队列优化... 上来开题看到这个,最一开始想,这题能用模拟短除法,再一想太慢了,就想着优化 偏偏想到线性筛然后试别的素 ...

  5. 单片机STM32在开发中常用库函数详解

    1.GPIO初始化函数 用法: voidGPIO_Configuration(void) { GPIO_InitTypeDefGPIO_InitStructure;//GPIO状态恢复默认参数 GPI ...

  6. 在Vue前端界面中,几种数据表格的展示处理,以及表格编辑录入处理操作。

    在Vue前端项目中,我这里主要是基于Vue+Element的开发,大多数情况下,我们利用Element的表格组件就可以满足大多数情况的要求,本篇随笔针对表格的展示和编辑处理,综合性的介绍几款表格组件的 ...

  7. longest-consecutive-sequence leetcode C++

    Given an unsorted array of integers, find the length of the longest consecutive elements sequence. F ...

  8. Codeforces 1009E Intercity Travelling | 概率与期望

    题目链接 题目大意: 一个人要从$A$地前往$B$地,两地相距$N$千米,$A$地在第$0$千米处,$B$地在第$N$千米处. 从$A$地开始,每隔$1$千米都有$\dfrac{1}{2}$的概率拥有 ...

  9. cf14C Four Segments(计算几何)

    题意: 给四个线段(两个端点的坐标). 判断这四个线段能否构成一个矩形.(矩形的四条边都平行于X轴或Y轴) 思路: 计算几何 代码: class Point{ public: int x,y; voi ...

  10. TDengine在浙商银行微服务监控中的实践

    作者:楼永红 王轩宇|浙商银行    浙商银行股份有限公司(简称"浙商银行")是 12 家全国性股份制商业银行之一,总部设在浙江杭州,全国第13家"A+H"上市 ...