python学习(11)——类的创建、调用、封装、隐藏类中的属性、property装饰器

# 1、定义一个类
# 语法:
# class 类名([父类]):
# 	代码块

# 包括:
# (1)数据(属性)
# (2)行为(方法)
# 在代码块中,定义变量——公共属性,所有的该类实例都可以通过  对象.属性名  的形式访问
#            定义函数——公共方法,所有的该类实例都可以通过  对象.方法名()  的形式调用方法。
#                       定义方法时,至少要定义一个形参!

class Person():

	def __init__(self,name,country,job):
    # 在类中可以定义一些特殊方法(魔术方法)
    # 特殊方法都是以__开头,__结尾的方法
    # 特殊方法不需要我们自己调用,不要尝试去调用特殊方法
    # 通过self向新建的对象中初始化属性
		self.name = name
		self.country = country
		self.job = job

	def say_hello(self):# 函数,公共方法,第一个形参是调用的方法对象本身,一般定义为self
		print('你好,我是%s,来自%s,官职是%s。'%(self.name,self.country,self.job))



# 2、调用对象属性,对象方法
 # p1就是通过Person创建的对象,p1是Person的实例
 #在创建对象时,必须设置name、country、job属性,如果不设置对象将无法创建
p1 = Person('曹操','魏国','丞相')
p2 = Person('刘备','蜀国','皇叔')
p1.say_hello()
p2.say_hello()
# ==============================
# 你好,我是曹操,来自魏国,官职是丞相。
# 你好,我是刘备,来自蜀国,官职是皇叔。
# ==============================


# 3、封装
# 使用封装,增加了类的定义的复杂程度,确保了数据的安全性
#   1.隐藏了属性名,使调用者无法随意的修改对象中的属性
#   2.增加了getter和setter方法,很好的控制的属性是否是只读的
#       如果希望属性是只读的,则可以直接去掉setter方法
#       如果希望属性不能被外部访问,则可以直接去掉getter方法
#   3.使用setter方法设置属性,可以增加数据的验证,确保数据的值是正确的
#   4.使用getter方法获取属性,使用setter方法设置属性
#       可以在读取属性和修改属性的同时做一些其他的处理
#   5.使用getter方法可以表示一些计算的属性

class Rectangle():
	"""矩形"""
	def __init__(self,height,width):
		self.hidden_height = height
		self.hidden_width = width

	def get_height(self):
		return self.hidden_height

	def get_width(self):
		return self.hidden_width

	def set_height(self,height):
		self.hidden_height = height

	def set_width(self,width):
		self.hidden_width = width

	def get_area(self):
		return self.hidden_height * self.hidden_width
		
r_1 = Rectangle(10,8)
r_1.set_width(4)
print(r_1.get_area())
# ==============================
# 40
# ==============================

# 4、隐藏类中的属性
# 	双下划线开头的属性是隐藏属性,无法通过对象访问。__XXX
# 	隐藏属性只能在类的内部访问,无法通过对象访问

# 使用__开头的属性,实际上依然可以在外部访问,所以这种方式我们一般不用
#   一般我们会将一些私有属性(不希望被外部访问的属性)以_开头
#   一般情况下,使用_开头的属性都是私有属性,没有特殊需要不要修改私有属性

class Dog():
	"""docstring for Dog"""
	def __init__(self,name):
		self.__name = name

	def get_name(self):
		return self.__name

	def set_name(self,name):
		self.__name = name

D_1 = Dog('肥柴')
print(D_1.get_name())
D_1.__name = '柯基' # 	双下划线开头的属性是隐藏属性,无法通过对象访问
print(D_1.get_name())

# ==============================
# 肥柴
# 肥柴
# ==============================

# 5、property装饰器
 # property装饰器,用来将一个get方法,转换为对象的属性
 # 添加为property装饰器以后,我们就可以像调用属性一样使用get方法
 # 使用property装饰的方法,必须和属性名是一样的
 # setter方法的装饰器:@属性名.setter

class Dog_mini():
	def __init__(self,name,age):
		self._name = name
		self._age = age

	@property
	def name(self):
		return self._name

	@property
	def age(self):
		return self._age

	@name.setter
	def name(self,name):
 		self._name = name

	@age.setter
	def age(self,age):
		self._age = age

d_mini=Dog_mini('二哈',5)
print('我是%s,今年%s岁。'%(d_mini.name,d_mini.age))
# ==============================
# 我是二哈,今年5岁。
# ==============================

d_mini.name = '西伯利亚狼'
d_mini.age = 10
print('我是%s,今年%s岁。'%(d_mini.name,d_mini.age))
# ==============================
# 我是西伯利亚狼,今年10岁。
# ==============================





 		

		

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值