zoukankan      html  css  js  c++  java
  • Python 面向对象

    Demo

    class NameClass:
        __slots__ = ('arg1', 'arg2')
    
        def __init__(self,arg1,arg2):
            self.arg1 = arg1
            self.arg2 = arg2
    
        def __repr__(self):
            return f'{self.arg1} {self.arg2}'
    
        @staticmethod
        def for_class_not_object(arg3,arg4):
            return arg3+arg4
    
        @classmethod
        def class_method_ex(cls):
            return cls.for_class_not_object(1,2)
    
        @property
        def _arg1(self):
            return self.arg1
        @_arg1.setter
        def _arg1(self,x):
            self.arg1 = x
        
    

    限制类属性

    为了达到限制的目的,Python允许在定义class的时候,定义一个特殊的__slots__变量,来限制该class能添加的属性。使用tuple定义允许绑定的属性名称。

    class NameClass:
        __slots__ = ('arg1', 'arg2')
    
        def __init__(self,arg1,arg2):
            self.arg1 = arg1
            self.arg2 = arg2
    
        
    

    初始化方法

    在创建对象的时候,通过自动执行__init__方法,完成对内存的初始化操作,也就是把数据放到内存空间中。

    打印对象

    打印对象的时候不希望看到对象的地址而是看到我们自定义的信息,可以通过在类中放置__repr__魔术方法来做到,该方法返回的字符串就是用print函数打印对象的时候会显示的内容。

    静态方法

    @staticmethod 创建方法是属于类而并不属于对象,就可以在实例化前调用。

    class NameClass:
        __slots__ = ('arg1', 'arg2')
    
        def __init__(self,arg1,arg2):
            self.arg1 = arg1
            self.arg2 = arg2
    
        def __repr__(self):
            return f'{self.arg1} {self.arg2}'
    
        @staticmethod
        def for_class_not_object(arg3,arg4):
            return arg3+arg4
    
        @classmethod
        def class_method_ex(cls):
            return cls.for_class_not_object(1,2)
        
    

    类方法

    @classmethod 和静态方法比较类似,Python还可以在类中定义类方法,类方法的第一个参数约定名为cls,它代表的是当前类相关的信息的对象,通过这个参数可以获取和类相关的信息并且可以创建出类的对象。

    @property装饰器

    如果想访问类的属性可以通过属性的getter(访问器)和setter(修改器)方法进行对应的操作。

    分别使用@property @_arg1.setter 定义方法_arg1

    class NameClass:
        __slots__ = ('arg1', 'arg2')
    
        def __init__(self,arg1,arg2):
            self.arg1 = arg1
            self.arg2 = arg2
    
        @property
        def _arg1(self):
            return self.arg1
        @_arg1.setter
        def _arg1(self,x):
            self.arg1 = x
    
    a  = NameClass(1,2)
    a.arg1 = 3
    print(a.arg1)
    # 3
    
  • 相关阅读:
    内存溢出和内存泄漏的区别
    各种集合类的区别以及原理
    如何设置java虚拟机参数
    [机器学习] 简单的机器学习算法和sklearn实现
    [机器视觉] SIFT特征-尺度不变特征理解
    [学习笔记] Markdown语法备忘
    [学习总结] python语言学习总结 (三)
    [学习笔记]Linux下mysql的基础操作
    [学习笔记] C++ 历年试题解析(三)--小补充
    [学习总结] python语言学习总结 (二)
  • 原文地址:https://www.cnblogs.com/linzhenyu/p/13205372.html
Copyright © 2011-2022 走看看