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 类定义的主要内容,如果未能解决你的问题,请参考以下文章