# 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岁。
# ==============================
python学习(11)——类的创建、调用、封装、隐藏类中的属性、property装饰器
最新推荐文章于 2024-08-03 19:27:22 发布