进阶之Python 基础知识

1、类方法、实例方法、静态方法

实例方法

    定义:第一个参数必须是实例对象,该参数名一般约定为self,通过它来传递实例的属性和方法(也可以传的属性和方法);

    调用:只能由实例对象调用。

类方法

    定义:使用装饰器@classmethod。第一个参数必须是当前类对象,该参数名一般约定为cls,通过它来传递的属性和方法(不能传实例的属性和方法);

    调用:实例对象和类对象都可以调用。

静态方法

    定义:使用装饰器@staticmethod。参数随意,没有“self”和“cls”参数,但是方法体中不能使用类或实例的任何属性和方法;

    调用:实例对象和类对象都可以调用。

使用装饰器@staticmethod。

静态方法是类中的函数,不需要实例。静态方法主要是用来存放逻辑性的代码,逻辑上属于类,但是和类本身没有关系,也就是说在静态方法中,不会涉及到类中的属性和方法的操作。可以理解为,静态方法是个独立的、单纯的函数,它仅仅托管于某个类的名称空间中,便于使用和维护。

 

源文档 <https://www.cnblogs.com/wcwnina/p/8644892.html>

 

而使用@staticmethod或@classmethod,就可以不需要实例化,直接类名.方法名()来调用。

这有利于组织代码,把某些应该属于某个类的函数给放到那个类里去,同时有利于命名空间的整洁。

2、@staticmethod和@classmethod的作用与区别

 

源文档 <https://blog.csdn.net/m0_37636884/article/details/81035697>

 

 

既然@staticmethod和@classmethod都可以直接类名.方法名()来调用,那他们有什么区别呢

从它们的使用上来看,

  • @staticmethod不需要表示自身对象的self和自身类的cls参数,就跟使用函数一样。
  • @classmethod也不需要self参数,但第一个参数需要是表示自身类的cls参数。

如果在@staticmethod中要调用到这个类的一些属性方法,只能直接类名.属性名或类名.方法名。

而@classmethod因为持有cls参数,可以来调用类的属性,类的方法,实例化对象等,避免硬编码。

 

源文档 <https://blog.csdn.net/m0_37636884/article/details/81035697>

 

 

3、装饰器  python 使用property

 

装饰器(Decorator)可以在不改变函数的前提下给函数增加功能,Python中内置的装饰器@property就是把一个方法变成属性调用的。

 

 

4、

所有的变量都可以理解是内存中一个对象的“引用”,或者,也可以看似c中void*的感觉

这里记住的是类型是属于对象的,而不是变量。而对象有两种,“可更改”(mutable)与“不可更改”(immutable)对象。在python中,strings, tuples, 和numbers是不可更改的对象,而list,dict等则是可以修改的对象。(这就是这个问题的重点)

 

类变量和实例变量

 

类变量就是供类使用的变量,实例变量就是供实例使用的.

 

 

1、装饰器
代码有一个开放封闭的原则,简单来说就是,已经实现的功能代码不允许被修改,单可以被扩展
装饰器(Decorator)可以在不改变函数的前提下给函数增加功能,Python中内置的装饰器@property就是把一个方法变成属性调用的。

2、深浅拷贝
Python中对象的赋值都是进行对象引用(内存地址)传递
使用copy.copy(),可以进行对象的浅拷贝,它复制了对象,但对于对象中的元素,依然使用原始的引用.
如果需要复制一个容器对象,以及它里面的所有元素(包含元素的子元素),可以使用copy.deepcopy()进行深拷贝

对于非容器类型(如数字、字符串、和其他’原子’类型的对象)没有被拷贝一说
如果元组变量只包含空列表类型对象,则不能深拷贝

浅拷贝是指针拷贝
深拷贝是内容拷贝
copy  deepcopy

3、局部变量和全局变量
作用域的问题
局部变量:就是在函数内部定义的变量
作用:为了临时保存数据需要在函数中定义变量来进行存储,这就是它的作用

全局变量:
如果一个变量,既能在一个函数中使用,也能在其他的函数中使用,这样的变量就是
如果在函数中修改全局变量,那么就需要使用global进行声明,否则出错


4、单继承和多继承

重写:所谓重写,就是子类中,有一个和父类相同名字的方法,在子类中的方法会覆盖掉父类中同名的方法

多态:
所谓多态:定义时的类型和运行时的类型不一样,此时就成为多态
多态是指不同的子类在继承父类后分别都重写覆盖了父类的方法,即父类同一个方法,在继承的子类中表现出不同的形式。

5、# 实例化一个单例
class Singleton(object):
    __instance = None

    def __new__(cls, age, name):
        #如果类数字能够__instance没有或者没有赋值
        #那么就创建一个对象,并且赋值为这个对象的引用,保证下次调用这个方法时
        #能够知道之前已经创建过对象了,这样就保证了只有1个对象
        if not cls.__instance:
            cls.__instance = object.__new__(cls)
        return cls.__instance

a = Singleton(18, "dongGe")

猜你喜欢

转载自blog.csdn.net/m0_37636884/article/details/82427490
今日推荐