Python面向对象2

特殊方法(魔术方法)

  • 2个下划线__ 开头和结尾
    不需要自己调用
    例如
    在这里插入图片描述
  • 初始化方法__init__
class MyClass():
	print('MyClass类中的代码执行了')
	def __init__(self,name): #初始化,实例化类后自动运行
		self.name = name
	def fn(a):
		print('self.name = ',a.name)
mc = MyClass('实例mc')#实例化类后,类中__init__方法运行了
print(mc.name)


MyClass类中的代码执行了
实例mc
  • 类的基本结构
类的基本结构

class 类名([父类]):
    公共属性...
    
    对象的初始化方法
    def __init__(self,....)
     ....
    其他的方法
    def method(self,...)
    ....

封装

隐藏类中不希望被外部访问的属性或方法。

  • 将类中的属性和方法名,修改为外部不知道的名
    1- 这样外部不知道属性和方法名就无法直接访问 属性和方法
    2- 可以设置getter,setter方法,来控制是否让外部访问

  • 私有属性
    一般对象前加2个下划线表示不让修改
    2个下划线,其实是python解释器将变量,修改为
    _类名__属性名
    一般情况,不去修改私有属性

class Person:
	def __init__(self,name,age):
		self.__name=name
		self.__age=age
p1=Person('Jim',20)
p1.__name='Dim'  #修改不了,但无报错

print(p1._Person__name)#Jim

# 利用dir(p1) 查看属性
['_Person__age',
 '_Person__name',
 ...
  '__name',
  ...

@property装饰器

  • @property装饰器
    可以通过调用属性的方式调用方法
class Person:
    def __init__(self,name):
        self.name=name
    @property
    def get_name(self):
        print('get_name方法执行了')
        return self.name
    @get_name.setter #方法.setter 这个装饰器用来补充修改get_name方法
    def get_name(self,name):
        self.name=name
p1=Person('Jim')
p1.get_name='Dim'
print(p1.get_name)#这里其实是调用了方法,但是写的形式是调用属性的形式,原因是get_name()方法前加了装饰器@property



get_name方法执行了
Dim
  • @staticmethod #静态方法
    写的时候不用带self参数,实例化时也不会传入实例对象作为第一个参数。
    类或实例均可调用
class Person:
    def __init__(self,name):
        self.name=name
    @staticmethod
    def show_name(name):
        print('show_name 方法执行了')
        return name
p1=Person('Jim')
print(p1.show_name('abc'))
print(Person.show_name('123'))

show_name 方法执行了
abc
show_name 方法执行了
123
  • @classmethod 这个装饰器用来指定方法只能调用类的属性和方法
    第一个参数是类对象
class Person:
    def __init__(self,name):
        self.name=name
    @property
    def get_name(self):
        print('get_name方法执行了')
        return self.name
    @staticmethod
    def show_name(name):
        print('show_name 方法执行了')
        return name
    @classmethod
    def print_name(cls): #第一个参数是类对象
        print('这是%s'%cls.show_name('abc'))#调用类中的方法
p1=Person('Jim')
p1.print_name()

show_name 方法执行了
这是abc  
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值