Python 类和对象(2)


上文讲到 类 = 属性 + 方法
今天来讲一下方法里常见的一个特殊的方法: 名字叫 __init__ 的构造方法
1.特殊的方法 :__init__
该方法在我们实例化类的时候,python就自动调用了它,你根本就不用费力去调用它,然后才能用它(好自觉的人喏)
下面举个栗子:
class Myidol():
def __init__(self):
self.name = "Taylor Swift"
self.action = "I do nothing at all"
idol = Myidol() #实例化
idol.action
'I do nothing at all'
从上面看到,我们只是实例化了Myidol这个类,然后__init__方法就被python调用了,我们啥也不用干就享受到了专属服务,__init__ 真棒
除了 self 参数,经常还会加入其他参数,都一排跟在 self 后面,排排坐
再来举栗子
class Myidol2():
def __init__(self, name, age, sex):
self.name = name
self.age = age
self.sex = sex
idol2 = Myidol2("Taylor", "18", "Female")
print("%s is %s years old (●'◡'●) and she is a lovely %s." % (idol2.name, idol2.age, idol2.sex))
Taylor is 18 years old (●'◡'●) and she is a lovely Female.

方法__init__必带一个参数self,它在所有参数里,排位永远第一(简直是老大),这也是类的方法与普通函数的一个区别。
当然,并不是必须写self,因为self并不是关键字,它只是一个代号,一个习惯用法。你可以写其他的,比如:beauty, handsomr_guy……都行哦
天马行空,随便你,写你所想即可。
那这个参数self到底是什么呢?
下面用实例看一下:
下面举栗子
class Noodles():
def fun(self):
print(self)
print(self.__class__)
xx = Noodles()
xx.fun()
<__main__.Noodles object at 0x000000A9298409E8>
<class '__main__.Noodles'>
class Noodles():
def fun(casual):
print(casual)
print(casual.__class__) #__class__用来获取类的类型
yy = Noodles()
yy.fun()
<__main__.Noodles object at 0x000000A9298402E8>
<class '__main__.Noodles'>
从上面的结果看出,self实际是类的一个实例,它表示当前对象的地址。
而self的class则指向了一个类。
简单来说,self就像一个叫惯了的外号:“二狗子”。平时大家都叫你“二狗子”,有一天,警察叔叔来找你时,叫了你的大名:吴爱国。你的同事们一脸懵逼,说没听过,没见过。

Thus,用self即可,特别是新上手时,延续大家的习惯用法就可。其他的,等你进阶后再操作会更有感觉。
平常呢,我们会这样写
class Noodles():
def fun(self, size, length):
self.size = size
self.length = length
在__init__方法内部,可以把各种属性绑定到self(self指向创建实例本身)。
当我们创建了__init__方法,在创建实例或者说实例化的时候,就不能传入空的参数,必须传入与__init__方法匹配的参数,但self不需要传参,Python解释器会自己吧实例变量传进去。
lunch = Noodles('medium', 25)
lunch.size #'medium'
lunch.length #25
刚开始可能有点不能接受self这种写法,但是,慢慢习惯吧
2.类的继承
一般,我们都会用到类的继承,如果不能继承,那要类来干啥。不要了,扔了。

不不不,Python的类是可以继承的,儿子是可以继承爸爸的基因、财产的。别怕,乖

#语法
class DerivedClassName(BaseClassName1): #派生类在外面,基类在括号里(英文翻译一下单词意思,自己get一下),也可以说儿子在外面,老爸在括号里
<statement-1>
.
.
.
<statement-N>
而继承又分为单继承和多继承。常见的是单继承,而多继承有时也会出现。多继承就好像你的长相,继承了你老爸、老妈、爷爷、奶奶、外公、外婆的长相的基因。额,长歪了也不能怪他们,对吧。
感恩的心,感谢有你~~
2.1 单继承
#先定义一个基类(爸爸)
class Makeup:
type = ''
degree = 0
def __init__(self, type, degree):
self.type = type
self.degree = degree
def Clean(self):
##普通清洁
print("%s 的清洁完成" % self.type)
def Water(self):
##普通版补水
print("%s de补水完成,整体难度系数为%s。 " % (self.type, self.degree))
#下面写个派生类(儿子)
class SmokyMakeup(Makeup):
steps = ''
def __init__(self, type, degree, steps):
self.type = type
self.degree = degree
self.steps = steps
def Cream(self):
#烟熏妆专用乳液
print("%s 搽乳液完成,这次化妆有 %s 步。" % (self.type, self.steps))
#实例化
test1 = SmokyMakeup("Smoky_1", "**星", 3)
print(test1.Clean())
print(test1.Water())
print(test1.Cream())
Smoky_1 的清洁完成
None
Smoky_1 de补水完成,整体难度系数为**星。
None
Smoky_1 搽乳液完成,这次化妆有 3 步。
None
上面的Clean方法和Water方法就是继承了爸爸的传统,而乳液在爸爸类里没有定义,到了画烟熏妆的时候,于是自己写了新的方法,搽乳液。可以看出这是一种拓展。这里的派生类SmokyMakeup只继承了一个Makeup这个基类。
2.2 多继承
上面介绍了继承一个类,那下面介绍继承多个类。
一般多继承的语法如下:
class DerivedClassName(Base1, Base2, Base3):
<statement-1>
.
.
.
<statement-N>
在括号里,看到基类1,基类2,基类3(爸爸1,爸爸2,爸爸3)。假如在继承过程中,有两个基类存在相同名字的方法,而子类在使用这个方法时,并没有专门指定用哪个基类的方法,那么,Python会按从左到右的顺序,去找到该方法,并在调用时就用这个方法。
举栗子时间到:
我们知道化妆可以让我们变美。当然,一个人身体的健康,更是我们变美的关键。下面,我们定义一个类:
#定义一个新的类
class Health:
height = ''
weight = 0
def __init__(self, type, height, weight):
self.type = type
self.height = height
self.weight = weight
def Water(self):
##每天八杯水
print("每天八杯水,喝毕")
#多继承
class Beauty(Health, Makeup):
def __init__(self, type, degree, height, weight):
Makeup.__init__(self,type, degree)
Health.__init__(self, type, height, weight)
test2 = Beauty("Smoky2", "*****星", 179, "140斤")
test2.Water()
每天八杯水,喝毕
可以看到,子类会优先继承左边父类的方法,优先级别:Base1 > Base2 > Base3 > …
想变美,还是身体健康重要呀(多喝水呀)。在这基础上,化妆后,才真的是大大大beauty。
今天就到这啦~
晚安~
Python 类和对象(2)的更多相关文章
- python类与对象各个算数运算魔法方法总结
1.python类与对象各个算术运算魔法方法总结: 2.各个魔法方法应用举例: 3.实例训练: (1)我们都知道在 Python 中,两个字符串相加会自动拼接字符串,但遗憾的是两个字符串相减却抛出异常 ...
- python 类和对象的属性
python类和对象的属性分为类属性和对象属性两大类,类属性属于类,而对象属性属于对象. 1. 父类的对象属性会被子类的对象继承. 2. 父类的类属性会被子类继承,还是作为类属性,如果父类改变了类属性 ...
- 一文讲全了Python 类和对象内容
摘要:这是一个关于 Python 类和对象的全部内容. 本文分享自华为云社区<从零开始学python | Python 类和对象-面向对象编程>,原文作者:Yuchuan . Pytho ...
- python类、对象
python类.对象 学习完本篇,你将会深入掌握 什么是类,对象 了解类和对象之间的关系 能独立创建一个People(人类),属性有姓名.性别.年龄.提供一个有参的构造方法,编写一个show方法,输出 ...
- python 类、对象、方法、属性
在python中,一个对象的特征也称为属性(attribute).它所具有的行为也称为方法(method) 结论:对象=属性+方法 在python中,把具有相同属性和方法的对象归为一个类(class) ...
- python类、对象、方法、属性之类与对象笔记
python中一切皆为对象,所谓对象:我自己就是一个对象,我玩的电脑就是对象,坐着的椅子就是对象,家里养的小狗也是一个对象...... 我们通过描述属性(特征)和行为来描述一个对象的.比如家里的小狗, ...
- python类与对象基本语法
面向对象编程的2个非常重要的概念:类和对象. 对象是面向对象编程的核心,在使用对象的过程中,为了将具有共同特征和行为的一组对象抽象定义,提出了另外一个新的概念--类. 类就相当于制造飞机时的图纸,用它 ...
- python 类和对象
类和对象 类 1.类的组成 数据和函数,二者是类的属性 2.两个作用: 实例化 属性引用 属性引用:类名.属性(增删改查) 实例化: 类名加括号就是实例化,会自动出发__init__的运行 ...
- Python类和对象
目录 类与对象 其他方法 继承 经典类和新式类 派生 组合 接口.归一化设计与抽象类 继承实现的原理 子类中调用父类的方法 指名道姓 super()方法 多态与多态性 封装 单下划线开头 双下划线开头 ...
- python类与对象的组合与继承
1.把类的对象实例化放到一个新的类里面叫做类的组合,组合就是指几个横向关系的类放在一起,纵向关系的类放在一起是继承,根据实际应用场景确定.简单的说,组合用于“有一个”的场景中,继承用于“是一个”的场景 ...
随机推荐
- 【转载】利用Amazon ECR和ECS部署容器应用
众所周知现在容器的技术越来越火,很多企业已经将整个业务架构容器化,利用容器的灵活性.可移植性.轻量等优势为企业开发和运维带来很大的优势,目前整个容器编排服务中最吃香的当然是Kubernetes (简称 ...
- 项目中微信公众号调取支付控件demo
微信支付官方文档:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7&index=6 前端代码demo (JSP页面): ...
- Python异常 --Python
一.常见的异常类型 FileNotFoundError:找不到指定文件的异常 NameError:未声明或者未初始化对象 BaseException:所有异常的基类 二.异常处理语句 1.try... ...
- 我叫Tomcat:一款web服务器
我叫Tomcat:一款web服务器 如何将我们的 Java 代码,运行在网络上,初学时,首先接触到的一般都是Servlet以及Jsp(或略过Jsp)而 Tomcat 就是这两者的容器,帮你处理动态网页 ...
- ${__setProperty 等常见jmeter参数相关博客汇总
jmeter 控制线程组执行顺序 这个要配合全局变量.if和while来实现BeanShell取样器,全局变量:${__setProperty(newswitch,${switch1},)}if条 ...
- Netty自定义数据包协议
粘包和分包出现的原因是:没有一个稳定数据结构 解决办法: 分割符 长度 + 数据 * <pre> * 数据包格式 * +——----——+——-----——+——----——+——---- ...
- PHP和Memcached - Memcached的介绍及常用命令
1.什么是Memcached 自由开源的,高性能,分布式内存对象缓存系统,分布式是基于客户的缓存系统,服务器之间是不相互通讯的. 2.Memcached的使用场景 储存session. 缓存数据. 解 ...
- 利用Python进行数据分析_Numpy_基础_2
Numpy数据类型包括: int8.uint8.int16.uint16.int32.uint32.int64.uint64.float16.float32.float64.float128.co ...
- 20191011-构建我们公司自己的自动化接口测试框架-ProVar模块
ProVar模块主要定义测试数据所在目录,以及定义变量和测试数据excel里面的column对应这样后续在进行excel操作的时候直接使用变量即可进行操作,后期excel的column有增删的时候,修 ...
- SVN操作出现locked错误解决办法
SVN操作出现locked错误解决办法:在SVN中执行 commit 操作时,在更新过程中,中断过,或者因为其他原因导致SVN 出现 locked 异常. 解决办法:1. 选中出现异常的文件,右键 - ...