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. Hdu P1394 Minimum Inversion Number | 权值线段树

    题目链接 题目翻译: 约定数字序列a1,a2,...,an的反转数是满足i<j和ai>aj的数对(ai,aj)的数量. 对于给定的数字序列a1,a2,...,an,如果我们将第1到m个数字 ...

  2. index 首页

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  3. fork函数详解(附代码)

    虽然篇幅很长,但大多是易懂的代码,不用担心看不完 这里的所有操作,都将在下面的代码中有所体现 fork会拷贝当前进程的内存,并创建一个新的进程.如上图,fork函数会将整个进程的内存镜像拷贝到新的内存 ...

  4. Java Logback简易教程

    本作品采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可. 一.前言 本文以一个简单的项目为例,一步步展示logback的同步和异步配置方法,并且配置的日志要求满足阿里巴巴Java开发手册- ...

  5. 谷粒 | 10 | 阿里云OSS存储对象服务

    阿里云OSS对象存储服务 准备工作 1.在service模块新建子模块service_oss 2.引入pom.xml文件中引入oss服务依赖 <dependencies> <!--a ...

  6. Failed to start connector [Connector[HTTP/1.1-8080]]

    错误提示:Failed to start connector [Connector[HTTP/1.1-8080]]错误原因:Tomcat端口被占用解决方案(window下):1.cmd打开命令控制台2 ...

  7. maven中的distributionManagement的作用

    mvn install  会将项目生成的构件安装到本地Maven仓库,mvn deploy 用来将项目生成的构件分发到远程Maven仓库. 本地Maven仓库的构件只能供当前用户使用,在分发到远程Ma ...

  8. Go语言核心36讲(Go语言实战与应用六)--学习笔记

    28 | 条件变量sync.Cond (下) 问题 1:条件变量的Wait方法做了什么? 在了解了条件变量的使用方式之后,你可能会有这么几个疑问. 1.为什么先要锁定条件变量基于的互斥锁,才能调用它的 ...

  9. 一个简单的golang项目,实验 gitlab-ci-cd Pipelines

    至少两台主机,gitlab + gitlab-runner gitlab + gitlab-runner安装略 项目源码:https://gitee.com/M27149/testgo.git 在自建 ...

  10. Typora常用操作

    Typora常用操作 目录 Typora常用操作 1. 标题 2.子标题 3. 区块 4.代码 5. 表格 6. 超链接 7.单选框 8.数学公式 9.流程图 10.生成目录 11.字体设置 12. ...