python_类 对象 属性
1, 类 (class)
类的概念表示某种对象的集合,用于表示某一种相同对象的模板。例如:人作为一个类 由这个“人”类定义出来的内容就是这个类定义出来的对象,类还拥有属性和功能,属性即类本身的一些特性,如人类有名字、身高和体重等属性,而具体值则会根据每个人的不同;功能则是类所能实现的行为,如人类拥有吃饭、走路和睡觉等"""
"""
属性递归学习 两个定义的类之间需要用两行空白进行隔开
1,定义动物类Animals 公共属性包括:类型:kind 颜色:color 公共方法: eat和sleep
2,定义Dog(狗)类,继承Animal类公共属性
3,定义Xtq(哮天犬)类,继承Dog类。
备注:子类会继承父类的方法,并且会继承”祖父“类的方法,例如:Xtq类会继承Dog类的属性,还会继承Animals类的属性
4,重写父类定义的方法,只需要在子类重新定义父类的方法即可重写。
5,扩展父类的方法,使用super()方法,可以执行父类的方法。
5,定义Cat类,继承Animals类的方法,不能调用狗类的方法,实现了不同类型相互隔离。
""" class Animals(): def __init__(self, kind, color):
self.kind = kind
self.color = color def __str__(self): # __str__方法用来描述对象内容,用return进行返回,print对象输出描述内容
return ("这是%s的%s" % (self.color, self.kind)) def eat(self):
print("%s的%s在吃饭" % (self.color, self.kind)) def sleep(self):
print("%s的%s在睡觉" % (self.color, self.kind)) class Dog(Animals): # 创建狗类,增加犬吠功能,继承Aninals方法,避免重复定义相同方法,减少重复代码。 def bark(self):
print("%s的%s在犬吠" % (self.color, self.kind)) # 可直接使用父类Animials里定义的color方法和kind方法 class Xtq(Dog): def change(self):
print("我是哮天犬,我会变身") def bark(self):
# 更改父类bark方法执行的内容,重新定义bark方法。
print("%s的%s是哮天犬,犬吠声是:嘤嘤嘤。。。。" % (self.color, self.kind))
# 继续执行父类的bark方法。
super().bark() class Cat(Animals): def climb(self):
print("%s的%s在爬树" % (self.color, self.kind)) # 创建小黄狗对象,会犬吠。
yellow_dog = Dog("狗", "黄色") # 使用Dog类创建对象
print(yellow_dog)
yellow_dog.eat() # 可调用Animals里面的方法
yellow_dog.sleep() # 可调用Animals里面的方法
yellow_dog.bark() # 可直接调用Dog类的方法 # 创建红色哮天犬对象,会变身。
xtq = Xtq("狗","红色")
xtq.change()
xtq.bark() # 使用xtq类的bark方法,不执行Dog类的bark方法 # 创建小黑猫对象,会爬树. 只能使用Animals类的方法,不可使用Dog类的方法,实现了相互隔离。
black_cat = Cat("猫", "黑色")
black_cat.eat()
black_cat.climb()
2, 私有属性
私有属性和私有方法,只能被自己类里面调用,无法被其他继承的子类所调用。
class A():
def __init__(self):
self.num1 = "1" # 共有属性
self.__num2 = "2" # 用self.__可以定义私有属性
def __str__(self):
return ("共有属性数字为:%s\n私有属性数字为%s" % (self.num1, self.__num2 )) # 私有属性只能定义的类里面自己使用,其他类无法调用
class B(A):
def __test(self): # 使用def.__定义私有方法,无法被外部调用。可以使用特殊命令调用
print("输出数字")
test = B()
print(test)
3, 单例涉及模式,__new__方法实现
多个对象使用一个内存地址空间,并且可实现初始化一次的需求:
class Music(object):
instance = None # 定义类属性,用来保存对象的地址空间
init_flag = False # 定义初始化属性,默认未执行初始化
def __new__(cls, *args, **kwargs):
# 判断类属性是否为空,如果为空,调用父类的__new__方法,为第一个对象分配内存空间
if cls.instance is None: # 判断是否为None 用is来判断
cls.instance = super().__new__(cls) # 调用父类__new__方法,并传递cls对象,分配内存空间,保存到instance。
return cls.instance # 将分配的内存地址返回给python解释器 def __init__(self,player):
self.player = player
if Music.init_flag: # 判断类属性是否为真,如果为真,直接返回,不执行初始化动作。如果为假,执行下一步动作
return
print("执行初始化")
Music.init_flag = True test = Music("qq音乐")
print(test) test1 = Music("百度音乐")
print(test1)
python_类 对象 属性的更多相关文章
- python添加、修改、删除、访问类对象属性的2种方法
1.直接添加.修改.删除.访问类对象属性 class Employee (object): empCount = 0 def __init__(self, name, salary) : self.n ...
- Method Resolve Order (MRO) - 类对象属性的解析顺序
Method Resolve Order (MRO) - 类对象属性的解析顺序 Python 支持多重继承, 此时就需要解决按照何种顺序来解析属性的问题.类的继承关系在一个特殊的类属性中指定(__mr ...
- java 获取实体类对象属性值的方法
在java中我们要获得实体类对象的属性,一般情况是将实体类中的属性私有化,然后再对外提供get()与set()方法,然后再获取实体类对象的属性的时候先把对象new出来,再用变量名.get()的方法得到 ...
- day 1类 对象 属性 方法
1. 解决吃啤酒鸭的问题 第一种方式(面向过程): 1)养鸭子 2)鸭子长成 3)杀 4)作料 5)烹饪 6)吃 7)卒 第二种方式(面向对象): 1)找个卖啤酒鸭的人 2)给钱 交易 3)吃 4)胖 ...
- python类对象属性查找原理
class Foo(object): def __init__(self): # 这是一个对象属性 self.obj_pro = 12 # 这是一类属性 c_pro = 11 # 这是一个静态方法 @ ...
- object-c计划tips-添加到类对象属性
这个问题从网络包的内容,由于保密问题,我刚才所描述我的业余的想法. 基本的想法: 网络请求,我们应该能够使用基类BaseNetWork, 然后由派生类继承BaseNetWork,并实现一些特殊的方法. ...
- 组合,Mixin,类、类对象、实例对象
1.组合,将几个横向关系的组合在一起.所谓的组合就是将类的实例化放到新类里面,那么就将旧类组合进去了. class Turtle: def __init__(self, x): # 注意 init 前 ...
- Python_getattr+__import__ 实现动态加载模块、类对象或函数
__import__() 语法 __import__(name[, globals[, locals[, fromlist[, level]]]]) 参数 name -- 字符串,模块的导入路径 说明 ...
- 007-Scala类的属性和对象私有字段实战详解
007-Scala类的属性和对象私有字段实战详解 Scala类的使用实战 变量里的类必须赋初值 def函数时如果没参数可不带括号 2.不需要加Public声明 getter与setter实战 gett ...
- 福利->KVC+Runtime获取类/对象的属性/成员变量/方法/协议并实现字典转模型
我们知道,KVC+Runtime可以做非常多的事情.有了这个,我们可以实现很多的效果. 这里来个福利,利用KVC+Runtime获取类/对象的所有成员变量.属性.方法及协议: 并利用它来实现字典转模型 ...
随机推荐
- 移动端安卓开发学习记录--Android Studio使用adb链接夜神模拟器常用指令
1.下载安装模拟器,打开模拟器,本步骤不再赘述 2.打开模拟机器安装路径,在地址栏输入cmd,回车,就会打开命令行窗口 3.输入 nox_adb.exe connect 127.0.0.1:62001 ...
- Python3+Selenium3自动化测试-(七)
在实际定位元素的过程中,发现有一种情况让人很是恼火,根据xpath路径定位,感觉像是没错哦,但是执行时就来一个报错信息--为什么呢? 多表单切换 例如我们登录网易邮箱时就会发现,定位登录框时,一个嵌套 ...
- linux 高效压缩工具之xz的压缩解压使用
xz是什么 高压缩率的工具,它使用 LZMA2 压缩算法,生成的压缩文件比传统使用的 gzip.bzip2 生成的压缩文件更小, 不过xz也有一个坏处就是压缩时间比较长,比7z压缩时间还长一些.不过压 ...
- python语法进阶这一篇就够了
前言 前面我们已经学习了Python的基础语法,了解了Python的分支结构,也就是选择结构.循环结构以及函数这些具体的框架,还学习了列表.元组.字典.字符串这些Python中特有的数据结构,还用这些 ...
- 怎么把Java,PHP,Vue等项目上传到GitHub,码云等
一.到github或者码云上建立一个私有或公开仓库(这里以github为例) 创建成功后我们得到了一个仓库地址,github上的操作完成,现在去项目内捣鼓 二.提交本地文件并推送 1.我是用命令的格式 ...
- Grafana 系列文章(十一):Loki 中的标签如何使日志查询更快更方便
️URL: https://grafana.com/blog/2020/04/21/how-labels-in-loki-can-make-log-queries-faster-and-easier/ ...
- 构建api gateway之 openresty 中如何使用 wasm
openresty 中如何使用 wasm WASM 是什么? WebAssembly是一种运行在现代网络浏览器中的新型代码,并且提供新的性能特性和效果.它设计的目的不是为了手写代码而是为诸如C.C++ ...
- Jetson Nano更改软件源
Jetson Nano 采用的是 aarch64 架构的Ubuntu 18.04.2 LTS 系统 sudo vim /etc/apt/sources.list deb http://mirrors. ...
- JZOJ 捕老鼠
题目 实际上经转换得: 给了 \(n(n \le 5 \times 10^5)\) 条线段,求覆盖 \([1..n]\) 需要的最少条数 分析 设 \(f_i\) 表示覆盖了 \([1..n]\) 时 ...
- 与时俱进的治疗策略不断提高RA无药缓解机会[EULAR2015_SAT0058]
随时代变迁而进化的治疗策略不断提高RA无药缓解机会 SAT0058 DMARD-FREE SUSTAINED REMISSION IN RHEUMATOID ARTHRITIS: AN OUTCOME ...