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. Java:并发笔记-01

    Java:并发笔记-01 说明:这是看了 bilibili 上 黑马程序员 的课程 java并发编程 后做的笔记 1. 进程与线程 本章内容 进程和线程的概念 并行和并发的概念 线程基本应用 1.1 ...

  2. OO_JAVA_电梯运行模拟_单元总结

    电梯运行模拟--三次作业总结 目录 电梯运行模拟--三次作业总结 总体遵循的设计思路 逻辑解耦 电梯与调度器解耦 楼层信息的存储和变更与电梯.调度器解耦 调度器运行流程解耦 第一次电梯,蠢笨串行先到先 ...

  3. elasticsearch的索引重建

    我们知道es在字段的mapping建立后就不可再次修改mapping的值.在我们实际的情况下有些时候就是需要修改mapping的值,解决方案就是重新构建索引数据. 方式一 : 使用索引别名,创建另外一 ...

  4. iptables 原理及应用

    转自:iptables 原理及应用 iptables是一个Linux下优秀的nat+防火墙工具,我使用该工具以较低配置的传统pc配置了一个灵活强劲的防火墙+nat系统,小有心得,看了网上也有很多这方面 ...

  5. Swift-技巧(二)模糊脸部功能

    摘要 本文介绍模糊脸部的功能逻辑和实现方式,实现方式会尽可能的使用苹果提供的 API,保证功能高效率和简洁. 逻辑 模糊脸部的逻辑主要有两个流程,就是先找到脸部,然后模糊脸部,那么就引申出这两个实现问 ...

  6. Forest v1.5.12 发布,声明式 HTTP 框架,已超过 1.6k star

    Forest介绍 Forest 是一个开源的 Java HTTP 客户端框架,它能够将 HTTP 的所有请求信息(包括 URL.Header 以及 Body 等信息)绑定到您自定义的 Interfac ...

  7. ESXi 6.7 的https服务挂掉处理方法 503 Service Unavailable

    首先进入EXSi开启SSH(ESXi的主机控制台,非web控制台,是安装esxi的控制台) 然后 /etc/init.d/hostd status 显示已停止, 使用 /etc/init.d/host ...

  8. Flink 的运行架构详细剖析

    1. Flink 程序结构 Flink 程序的基本构建块是流和转换(请注意,Flink 的 DataSet API 中使用的 DataSet 也是内部流 ).从概念上讲,流是(可能永无止境的)数据记录 ...

  9. WPF进阶技巧和实战03-控件(4-基于范围的控件及日期控件)

    系列文章链接 WPF进阶技巧和实战01-小技巧 WPF进阶技巧和实战02-布局 WPF进阶技巧和实战03-控件(1-控件及内容控件) WPF进阶技巧和实战03-控件(2-特殊容器) WPF进阶技巧和实 ...

  10. 测试平台系列(72) 了解ApScheduler基本用法

    大家好~我是米洛! 我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的完整教程,希望大家多多支持. 欢迎关注我的公众号测试开发坑货,获取最新文章教程! 回顾 上一节我们调研了一下市面上 ...