Python类

类相当于模板,对象是类的实例。

可以把类理解成做饼干的模子,对象就是用模子做出的饼干。

我们定义一个class的时候,我们实际上就定义了一种数据类型,我们定义的数据类型和python自带的数据类型,比如str,list,dict没什么两样

---------------------------------------------

类变量:

1.在实例化对象中是公用的。

2.定义在类中且在函数体之外。

3.通常不作为实例变量使用。

4.ClassName.bianliang来访问

--------------------------------------------------

实例变量:

1.定义在方法中的变量。

2.只作用于当前实例的类。

3.self.bianliang来访问

实例化:创建一个类的实例,类的具体对象。

--------------------------------------------------------

方法:

类中定义的函数。

和普通的函数相比,在类中定义的函数只有一点不同,就是第一个参数永远是实例变量self

并且,调用时,不用传递该参数。

除此之外,类的方法和普通函数没有什么区别,所以,你仍然可以用默认参数、可变参数和关键字参数。

方法重写,继承,多态。

------------------------------------------------------

创建类:

class ClassName:

  'xxxxx'    //类文档字符串,可通过ClassName.__doc__查看

  class_suite

-------------------------------------------------------

构造方法(初始化方法):

当创建这个类的实例时就会调用该方法,self代表类的实例,self在定义类的方法时是必须有的。

创建类的实例的时候,就不能传入空的参数,必须传入与__init__方法匹配的参数,但是self不需要传,init只能有一个

__init__()方法是可选的,如果不提供,python会给出默认的__init__方法

def __init__(self,name,score):

  self.name=name

  self.score=score

可以把要先初始化的属性放到这个函数里面

name和score为类的实例变量,用  ‘对象名.实例变量名’  访问

-------------------------------------------------------

类的实例化:

对象名=类名()

emp=Employee("zara",2000)   //emp是Employee类型

判断一个变量是否是某个类型可以用isinstance()判断: isinstance(emp,Employee),返回true

-----------------------------------------------------------

访问属性:

getattr(obj, name[, default]) : 访问对象的属性。

hasattr(obj,name) : 检查是否存在一个属性。

setattr(obj,name,value) : 设置一个属性。如果属性不存在,会创建一个新属性。

delattr(obj, name) : 删除属性。

----------------------------------------------------------

内置类属性:

__dict__ :类的属性

__doc__ :类的文档字符串

__name__:类名

__module__:类定义所在的模块(类的全名是'__main__.className',如果类位于一个导入模块mymod中,那么className.__module__ 等于 mymod)

__bases__:类的所有父类构成元素(包含了一个由所有父类组成的元组)

-------------------------------------------------------

类的继承:

所有类都会继承Object类

class Son(Parent):

  xxxx

1.父类的构造(__init__())方法不会被自动调用

2.class C(A,B):  //继承类A和B

3.子类实例可以调用父类方法

4.issubclass(sub,sup) 尔函数判断一个类是另一个类的子类或者子孙类

5.isinstance(obj, Class) 布尔函数如果obj是Class类的实例对象或者是一个Class子类的实例对象则返回true

//父类
class Person(object): def __init__(self, name, gender): self.name = name self.gender = gender
//子类
class Student(Person):
    def __init__(self, name, gender, score):         //子类需要自己定义初始化函数,父类的构造(__init__())方法不会被自动调用
        super(Student, self).__init__(name, gender)   //name和gender调用父类的,一定要用 super(Student, self).__init__(name, gender) 去初始化父类,否则,继承自 Person 的 Student 将没有 name 和 gender。
        self.score = score

-----------------------------------------------------

方法的重写:

----------------------------------------------------

类的私有属性:

__private_attrs: 只能在类内部方法中通过self.__private_attrs使用

例子:__secretCount = 0  # 私有变量

类的私有方法:

__private_method:只能在类内部调用self.__private_method

protected变量:

_foo: 只能允许其本身与子类进行访问,不能用于 from module import *

 ------------------------------------------------

多态存在的必要条件:

1.要有继承

2.要有重写

Dog类继承Animal类,Dog类产生一个实例变量d,d的数据类型是Dog,也是Animal,当d有某些行为(理解成使用类的方法)时,优先使用Dog类方法。

输出结果:A B C A E

没有谁规定test方法是接收的参数是什么类型的。test方法只规定,接收一个参数,调用这个参数的prt方法。

在运行的时候如果这个参数有prt方法,python就执行,如果没有,python就报错,因为abcde都有prt方法,而f没有,所以得到了上边得结果,这就是python的运行方式。

--------------------------------------------------------

析构函数:

__del__(self):

  xxxx

当使用del删除对象时,会调用他本身的析构函数,另外当对象在某个作用域中调用完毕,在跳出其作用域的同时析构函数也会被调用一次,这样可以用来释放内存空间。

__del__()也是可选的,如果不提供,则python会在后台提供默认析构函数

显式的调用析构函数,可以使用del关键字,例如:del 对象名

----------------------------------------------------------

 

 

 

 

原文地址:https://www.cnblogs.com/zz27zz/p/7427602.html