面向对象编程-进阶(python3入门)

Posted 名叫蛐蛐的喵

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象编程-进阶(python3入门)相关的知识,希望对你有一定的参考价值。

一、property装饰器的使用

技术分享图片
#property:将一个方法伪装成一个数据属性
#如果不用property装饰器的话,这个bmi值就需要用 obj.bmi() 来调取数值,这个看起来更像一个功能,而不像一个特征


#例1
# class People:
#     def __init__(self,name,height,weight):
#         self.name = name
#         self.height =height
#         self.weight = weight
#
#     @property
#     def bmi(self):
#         return self.weight / (self.height ** 2)
#
# obj = People(‘egon‘,1.8,70)
# print(obj.bmi)


#例2     如果不使用property装饰器,则取到name 需要使用obj.name() 这看起来更像一个函数
#推荐使用这种方法


# class People:
#     def __init__(self,name):
#         self.__name = name
#
#     @property   #访问某个属性的操作
#     def name(self):
#         return self.__name
#
#     @name.setter    #但凡被property装饰过的函数,才会出现.setter,该装饰器是用来 修改函数的值
#     def name(self,value):
#         if type(value) is not str:
#             print(‘必须是字符串类型‘)
#             return
#         self.__name = value
#
#     @name.deleter   #删除某一个属性
#     def name(self):
#         print(‘不可删除‘)
#
# obj = People(‘lich‘)
# # print(obj.name)
# print(obj.__dict__)
#
# obj.name = ‘egon‘
# print(obj.__dict__)
# # print(obj.name)
# # print(obj.__dict__)
# #
# #
# # del obj.name


#例3  property的古老使用方法(不推荐使用)
class People:
    def __init__(self,name):
        self.__name = name

    def get_name(self):
        return self.__name

    def set_name(self,value):
        if type(value) is not str:
            print(必须str)
            return
        self.__name = value

    def del_name(self):
        del self.__name

    name = property(get_name,set_name,del_name)



obj = People(lich)
print(obj.name)

obj.name = egon
print(obj.__dict__)

del obj.name
print(obj.__dict__)
property,setter,deleter

 

二、绑定方法和非绑定方法

定义和格式:

技术分享图片
‘‘‘
绑定方法:
    特殊之处:绑定给谁就应该由谁来调用,会将调用者(点左边的就是调用者)当作第一个参数自动传入

    绑定对象的方法:类中定义的函数在没有被任何装饰器装饰的情况下,默认就是绑定给对象的
                绑定对象的方法应该由对象来调用,自动传入的是对象

    绑定类的方法:为类中定义的函数添加装饰器classmethod
                绑定类的方法应该由类来调用,自动传入的是类


非绑定方法
    特殊之处:无论类和对象谁来调用,都只是一个普通函数,没有自动传值的效果。





‘‘‘

class People:
    def __init__(self,name,age):
        self.name = name
        self.age = age


    def tell_info(self):
        print(<%s:%s>%(self.name,self.age))


    @classmethod    #类来调用,会自动传入类,若对象来调用的话,仍然传入类
    def func1(cls):
        print(cls)


    @staticmethod
    def func2(a,b):
        print(==========>,a,b)


print(People.func1)
obj = People(egon,19)

print(obj.func1)
obj.func1()

obj.func2(obj1,obj2)
People.func2(people1,people2)

print(obj.func2)    #只是普通函数
print(People.func2) #只是普通函数
staticmethod,classmethod

 

使用场景与方法:

 

以上是关于面向对象编程-进阶(python3入门)的主要内容,如果未能解决你的问题,请参考以下文章

Python3快速入门Python3面向对象

Python之路,Day8 - 面向对象编程进阶

Python入门自学进阶——5--类与对象

Python3入门教程||Python3 面向对象||Python3 标准库概览

VSCode自定义代码片段——JS中的面向对象编程

VSCode自定义代码片段9——JS中的面向对象编程