python之类与对象(2)
3. 类函数的进阶
3.1 类函数调用类属性
关于类函数调用类属性,我们尝试修改前一节的内容,以我们在之前学习的内容,调用属性直接用%+属性就可以了,那我们来试一下:
看到了程序有报错,这其实是因为在类函数中要调用类属性,必须要在类属性之前加上self关键字,调用方法是self.类属性名,那我们修改一下,加上self。
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Time :2018/12/3 16:33
# @Author :Yosef
# @Email :wurz529@foxmail.com
# @File: :animal.py
# @Software :PyCharm Community Edition
class Animal:
''''
name,sex,age是Animal的属性
'''
name = "TOM"
sex = "male"
age = "" '''
eat,run是Animal的方法
'''
def eat(self):
print("这是一只会吃肉的小脑斧,我的名字是:%s"%self.name) def run(self):
print("我不仅会吃,还会跑!!") tiger1 = Animal() # 实例一个对象 '''
调用类属性以及方法
'''
tiger1.eat()
tiger1.run()
print("这是一只叫%s的小脑斧!" %tiger1.name)
print(tiger1.age)
print(tiger1.sex)
结果:
3.2 类函数带有位置参数
刚刚的例子是类函数中不带有参数,如果带有参数呢?我们先试着self.参数名来试一下?
运行结果还是发现报错了,报错信息说丢失参数。那么就说明,用self.name是没办法呼应传入的参数的。把self删掉,再试一下:
class Animal:
''''
name,sex,age是Animal的属性
'''
name = "TOM"
sex = "male"
age = "" '''
eat,run是Animal的方法
'''
def eat(self, name):
print("这是一只会吃肉的小脑斧,我的名字是:%s" % name) def run(self):
print("我不仅会吃,还会跑!!") tiger1 = Animal() # 实例一个对象 '''
调用类属性以及方法
'''
tiger1.eat("TOM")
结果运行成功,类函数其实跟学习的普通函数没有啥区别,就是在编写类函数的时候,需要在函数后面的括号里,传入一个self关键字。这就是唯一跟普通函数的区别,加上位置参数之后,跟普通函数也是没有其他的区别。
3.3 类函数带有默认参数
刚刚的例子是类函数中传入没有默认值的参数,如果有要有默认值怎么办嘞?
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Time :2018/12/3 16:33
# @Author :Yosef
# @Email :wurz529@foxmail.com
# @File: :animal.py
# @Software :PyCharm Community Edition
class Animal:
''''
name,sex,age是Animal的属性
'''
name = "TOM"
sex = "male"
age = "" '''
eat,run是Animal的方法
'''
def eat(self, name="James"):
print("这是一只会吃肉的小脑斧,我的名字是:%s" % name) def run(self):
print("我不仅会吃,还会跑!!") tiger1 = Animal() # 实例一个对象 '''
调用类属性以及方法
'''
tiger1.eat("TOM")
tiger1.eat()
# tiger1.run()
# print("这是一只叫%s的小脑斧!" %tiger1.name)
# print(tiger1.age)
# print(tiger1.sex)
可以看到类函数中的位置参数如果带有默认参数,那么在创建实例调用函数的时候,如果传了值运用用户传入的值,如果没有传值,就会自动使用默认参数。
如果类函数里面同时有位置参数以及默认参数,他们的参数位置顺序,有何要求呢?看以下代码:
class Animal:
''''
name,sex,age是Animal的属性
'''
name = "TOM"
sex = "male"
age = 5 '''
eat,run是Animal的方法
'''
def eat(self, name="James", age):
print("这是一只会吃肉的小脑斧,我的名字是:%s,今年%s了" % (name, age)) def run(self):
print("我不仅会吃,还会跑!!") tiger1 = Animal() # 实例一个对象 '''
调用类属性以及方法
'''
tiger1.eat("TOM",5)
然后出现了surprise:
造成这个的原因是这种错误原因是将没有默认值的参数在定义时放在了有默认值的参数的后面。也就是说,在传参时,没有默认值的参数必须要放在有默认值的位置参数之前。那么我们把两个参数互换一下位置:
class Animal:
''''
name,sex,age是Animal的属性
'''
name = "TOM"
sex = "male"
age = 5 '''
eat,run是Animal的方法
'''
def eat(self, age, name="James"):
print("这是一只会吃肉的小脑斧,我的名字是:%s,今年%s岁了" % (name, age)) def run(self):
print("我不仅会吃,还会跑!!") tiger1 = Animal() # 实例一个对象 '''
调用类属性以及方法
'''
tiger1.eat(5,"TOM")
这次就很nice没有出现问题。
3.4 类函数之间的相互调用
正常函数可以相互调用,类函数也可以相互调用,具体怎么来的以及有什么区别,来详细看一下吧。
3.4.1 类函数内调里不带参数的类函数
调用不带任何参数的类函数,跟普通的函数并没有啥区别,只是我们需要在函数之前加入关键字:self。
class Animal:
''''
name,sex,age是Animal的属性
'''
name = "TOM"
sex = "male"
age = 5 '''
eat,run是Animal的方法
'''
def eat(self, age, name="James"):
print("这是一只会吃肉的小脑斧,我的名字是:%s,今年%s岁了" % (name, age))
self.run() def run(self):
# self.eat(5)
print("我不仅会吃,还会跑!!") tiger1 = Animal() # 实例一个对象 '''
调用类属性以及方法
'''
# tiger1.run()
tiger1.eat(5)
这里发现成功调用了。
3.4.2 类函数内调用带参数的类函数
调用带参数的类函数,必须要把他的参数传入,否则运行肯定报错。这就需要我们改写类函数!!要带上被调用类函数的参数。
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Time :2018/12/3 16:33
# @Author :Yosef
# @Email :wurz529@foxmail.com
# @File: :animal.py
# @Software :PyCharm Community Edition
class Animal:
''''
name,sex,age是Animal的属性
'''
name = "TOM"
sex = "male"
age = 5 '''
eat,run是Animal的方法
'''
def eat(self, age, sex, name="James"):
print("这是一只会吃肉的小脑斧,我的名字是:%s,今年%s岁了" % (name, age))
self.run(sex) def run(self,sex):
# self.eat(5)
print("我性别是%s,不仅会吃,还会跑!!"%sex) tiger1 = Animal() # 实例一个对象 '''
调用类属性以及方法
'''
# tiger1.run()
tiger1.eat(5,"male")
# print("这是一只叫%s的小脑斧!" %tiger1.name)
# print(tiger1.age)
# print(tiger1.sex)
结果成功:
3.5 类函数带有动态参数
还记得动态参数吧,就是*args,类函数中怎么使用动态参数呢?这一点其实跟以前还是一样,没有什么区别。
class Animal:
''''
name,sex,age是Animal的属性
'''
name = "TOM"
sex = "male"
age = 5 '''
eat,run是Animal的方法
'''
def eat(self, age, sex, name="James"):
print("这是一只会吃肉的小脑斧,我的名字是:%s,今年%s岁了" % (name, age))
self.run(sex) def run(self,sex):
# self.eat(5)
print("我性别是%s,不仅会吃,还会跑!!"%sex) def eatfood(self, *args):
for food in args:
print("我的食物有:%s" %food) tiger1 = Animal() # 实例一个对象 '''
调用类属性以及方法
'''
tiger1.eatfood("肉", "水果", "胡萝卜")
3.6 类函数带有关键字参数
class Animal:
''''
name,sex,age是Animal的属性
'''
name = "TOM"
sex = "male"
age = 5 '''
eat,run是Animal的方法
'''
def eat(self, age, sex, name="James"):
print("这是一只会吃肉的小脑斧,我的名字是:%s,今年%s岁了" % (name, age))
self.run(sex) def run(self,sex):
# self.eat(5)
print("我性别是%s,不仅会吃,还会跑!!"%sex) def eatfood(self, *args):
for food in args:
print("我的食物有:%s" %food) def getInfomation(self, **kwargs):
print("我的个人信息是:%s"%kwargs) tiger1 = Animal() # 实例一个对象 '''
调用类属性以及方法
'''
tiger1.getInfomation(name="jerry", age="",sex="female")
python之类与对象(2)的更多相关文章
- python基础——获取对象信息
python基础——获取对象信息 当我们拿到一个对象的引用时,如何知道这个对象是什么类型.有哪些方法呢? 使用type() 首先,我们来判断对象类型,使用type()函数: 基本类型都可以用type( ...
- python 引用和对象理解
今天浏览博客的时候看到这么一句话: python中变量名和对象是分离的:最开始的时候是看到这句话的时候没有反应过来.决定具体搞清楚一下python中变量与对象之间的细节.(其实我感觉应该说 引用和对象 ...
- Python深入03 对象的属性
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python一切皆对象(object),每个对象都可能有多个属性(attribut ...
- Python的基础--对象 转
对象(Objects)是python中数据的抽象,python中所有的数据均可以用对象或者是对象之间的关系来表示.每个对象均有标识符(identity).类型(type).值(value). 标识 ...
- Python可迭代对象、迭代器和生成器
Python可迭代对象.迭代器和生成器 python 函数 表达式 序列 count utf-8 云栖征文 python可迭代对象 python迭代器 python生成器 摘要: 8.1 可迭代对象( ...
- Python的基础--对象
对象(Objects)是python中数据的抽象,python中所有的数据均可以用对象或者是对象之间的关系来表示.每个对象均有标识符(identity).类型(type).值(value). 标识符. ...
- Python一切皆对象
Python从设计之初就是一门面向对象的语言,它有一个重要的概念,即一切皆对象. Java虽然也是面向对象编程的语言,但是血统没有Python纯正.比如Java的八种基本数据类型之一int,在持久化的 ...
- python引用和对象详解
python引用和对象详解 @[马克飞象] python中变量名和对象是分离的 例子 1: a = 1 这是一个简单的赋值语句,整数 1 为一个对象,a 是一个引用,利用赋值语句,引用a指向了对象1. ...
- 举例子来说明Python引用和对象
今天看到这么一句奇怪的话: python中变量名和对象是分离的:最开始的时候是看到这句话的时候没有反应过来.决定具体搞清楚一下python中变量与对象之间的细节.(其实我感觉应该说 引用和对象分离 更 ...
- Python 获取类对象的父类
参考 Get parent class name? Python 获取类对象的父类 给定一个类的对象a,要求获取该对象的父类. 方法: a.__class__.__bases__ 返回由该对象的父类组 ...
随机推荐
- Git blame
一.简介 git blame可以将文件中的每一行的作者.最新的变更提交和提交时间展示出来. 二.实例 http://blog.csdn.net/hudashi/article/details/76 ...
- Luogu 4726 【模板】多项式指数函数
补补补…… 这个题的解法让我认识到了泰勒展开的美妙之处. 泰勒展开 泰勒展开就是用一个多项式型的函数去逼近一个难以准确描述的函数. 有公式 $$f(x)\approx g(x) = g(x_0) + ...
- Spring Boot☞ 使用Thymeleaf模板引擎渲染web视图
静态资源访问 在我们开发Web应用的时候,需要引用大量的js.css.图片等静态资源. 默认配置 Spring Boot默认提供静态资源目录位置需置于classpath下,目录名需符合如下规则: /s ...
- Yii2 修改 breadcrumb 首页图标
<?=Breadcrumbs::widget([ 'homeLink' => [ 'label' => '<i class="fa fa-home"> ...
- kcp源码segment头文件各字段含义
conv conv为一个表示会话编号的整数,和tcp的 conv一样,通信双// 方需保证 conv相同,相互的数据包才能够被认可 cmd cmd用来区分分片的作用.IKCP_ ...
- BZOJ 2038 小Z的袜子(hose) (莫队算法)
题意:中文题. 析:很著名的莫队算法,先把这个求概率的式子表达出来,应该是分子:C(x1, 2) + C(x2, 2) + C(x3, 2) + ... + C(xn, 2) 分母:C(n, 2), ...
- 如何使用office2016发布CSDN博客
目前大部分的博客作者在用Word写博客这件事情上都会遇到以下3个痛点: 1.所有博客平台关闭了文档发布接口,用户无法使用Word,Windows Live Writer等工具来发布博客.使用Word写 ...
- Ubuntu 将应用程序 固定到快快速启动栏(以Sublime为例)
因为Sublime Text并不是需要安装,所以缺少Ubuntu桌面运行的一些基本配置,比如不能将它加入桌面侧边的启动器. 而Ubuntu上也没有快捷方式的说法,而通过软件中心安装的软件就有图标,并能 ...
- Short jhat tutorial: diagnosing OutOfMemoryError by example
转自: http://petermodzelewski.blogspot.com/2013/06/short-jhat-tutorial-diagnosing.html jhat这个工具经过使用, 发 ...
- win10登录不上sql2005
因需求安装了一个SQL Server 2005. 登录的时候,用户Sa模式可以登录,Windows身份验证方式却无法登录. 经测试.解决方法如下: SQL Server Management Stud ...