2022 年,把 Python 学得跟 Java 一样熟练——02 类定义

Posted 毕小宝

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2022 年,把 Python 学得跟 Java 一样熟练——02 类定义相关的知识,希望对你有一定的参考价值。

背景

今天学会了 Python 的类定义,创建一个 Person 类,包含姓名、生日、地址三个成员变量和对应的 gettersetter 方法。

本文实践了类的定义、引用的方法,对比了与 Java 的类的语法的差异,知识点:

  1. 构造函数、方法的限制。
  2. 类的引用。

实践编码

# -*- coding: UTF-8 -*-

''' 
一个 Person 类
1、姓名
2、生日
3、地址
4、属性的 getter 和 setter 方法
'''
class Person():
	def __init__(self,name,birthday,address):
		self.name = name
		self.birthday = birthday
		self.address = address
	

	def getName(self):
		return self.name
	
	def setName(self,name):
		self.name = name

	def getBirthday(self):
		self.birthday

	def setBirthday(self,birthday):
		self.birthday=birthday

	def crt(self):
		return 'crt'

	def getAddress(self):
		return self.address

	def getPersonInfo(self):
		return self.name+','+self.birthday+','+self.address

person = Person('wang','1998-11-11','中国')
print person.getName()
person.setName('张三')
print person.crt()
print person.getName()
print person.getAddress()
print person.getBirthday()
print person.getPersonInfo()

运行结果:

实践问题

  1. 自定义的这个类和它所在的 py 文件名称有什么约束关系?
    没有约束,可以同名
  2. 如何在另一个文件中引用该类?
    使用 from 模块名 import 类名
  3. 不同模块、同名类,但是不同目录,怎么引用?
    使用 as 加别名,注意是小写

如果引用发生在同一个目录下的两个模块中,直接使用 from 模块名 import 类名
如果发生在不同目录中,例本例中 Person.py 位于 module.py 的父目录中。

拷贝 Person.py 到 module.py 的父级目录,引入方式如下:

'''
同级目录下,Person.py 模块中的 Person 类引用方式如下
'''
from Person import Person
person = Person('wang','1998-11-11','中国')
print person.getName()
person.setName('张三')
print person.crt()
print person.getName()
print person.getAddress()
print person.getBirthday()
print person.getPersonInfo()

'''
同级目录下,Person.py 模块中的 Person 类引用方式如下
'''
sys.path.insert(0,'..')
from ParentPerson import Person as ParentPerson
pperson = ParentPerson('Pwang','1998-11-11','中国')
print pperson.getName()
pperson.setName('P张三')
print pperson.crt()
print pperson.getName()
print pperson.getAddress()
print pperson.getBirthday()
print pperson.getPersonInfo()

实践启示录

对照 Java 的语法想 Python 类定义,类定义主要知识点如下:

  1. 需要切换 Python 语句体的字符是冒号 : 而不是 花括号
  2. Python 的类方法定义时,第一个参数必须是 self 表示当前类对象,否则会报异常。这与 Java 天然就具有隐形的 this 对象不一样。
  3. Python 的构造函数名称固定为 __init__(self,arg...),定义成员变量的时候直接 self.xx 就可以了,不需要逐个声明。
  4. Python 的方法返回一个值竟然可以不用 return 关键字,直接一个值。
  5. Python 类实例的创建直接类名称,不像 Java 一样用 new 关键字。
  6. Python 的 from 模块名称 import 方法或者类,导入语句可以写在任意地方,边解释边执行,这点与 Java 的编译型处理方式不同。

今天早上还看到一个语言排行版,Python 位居榜首的。2018 年对 Python 了解一点皮毛,今年决定把 Python 掌握得跟 Java 一样熟练。

Python 的缩进,这个麻烦的印象还是没有办法消除。恼人的是,就算直接拷贝上面的代码,缩进还是可能报错,不知道有没有编辑器能够解决缩进问题啊!

以上是关于2022 年,把 Python 学得跟 Java 一样熟练——02 类定义的主要内容,如果未能解决你的问题,请参考以下文章

2022 年,把 Python 学得跟 Java 一样熟练——05 插入排序

2022 年,把 Python 学得跟 Java 一样熟练——02 类定义

2022 年,把 Python 学得跟 Java 一样熟练——04 matplotlib 绘制概率图

2022 年,把 Python 学得跟 Java 一样熟练——06 获取 u817eu8bafu0020 Cosmic

2022 年,把 Python 学得跟 Java 一样熟练——06 获取 u817eu8bafu0020 Cosmic

2022 年,把 Python 学得跟 Java 一样熟练——06 获取 u817eu8bafu0020 Cosmic