python之面向对象

object类是一个超类,是所有类的父类。                      pass表示类里面什么都不没有是个空类。

类拥有3种行为2种属性:  ①静态方法  ②类方法  ③实例方法。                             ①类属性  ②实例属性。

实例对象可以调用这3种方法,类名则不能调用实例方法。

类定义:类名首字母必须大写,

# coding=utf-8
class A:        # 第一种简写方式
    pass


class B(object):    # 第二种方式()里面写上继承的父类,默认写上object
    pass
类定义

静态方法:需要用@staticmethod修饰,使用类名调用。和类方法区别在于不能使用cls。

# coding=utf-8
class A(object):
    @staticmethod         # 静态方式必须用static修饰
    def fun1():               # 函数定义
        print("类里面的静态方法")


A.fun1()
静态方法

类方法:需要用@classmethod修饰,使用类名调用。cls可以访问类的所有属性,cls看做类方法的额外属性。

# coding=utf-8
class A(object):
    @classmethod
    def fun1(cls):
        print("类方法")


A.fun1()
类方法

 实例方法:必须有一个额外的参数,一般为self可以修改但不推荐,代表类的实例,self可以访问当前实例的所有属性。实例方法只能使用对象调用。

# coding=utf-8
class A(object):
    def fun1(self):
        print("实例方法")


a = A()       # 创建实例对象
a.fun1()
实例方法

类属性: 直接定义在类里面的属性或者使用cls动态添加的属性。类属性被所有实例共享。实例修改类属性,只不过是创建了一个同名的实例属性,没有真正修改类属性。

class A(object):
    a = 10     # 直接定义在类里面
类属性

实例属性:每个实例单独存在的属性。①在类的构造函数里面定义。②在实例中创建。

# coding=utf-8
class A(object):
    def __init__(self):     # self代表当前实例
        self.a = 10         # 第一种定义实例属性
        print("构造函数")


s = A()
s.b = 20                    # 第二种定义实例属性
print(s.a, s.b)
实例属性

构造函数:前后__init__双下划线。创建对象时候会自动调用构造函数,如果没有声明构造函数,会自动调用父类构造函数,其他情况下都不会调用父类构造函数,即使是继承。构造函数属于实例方法。

# coding=utf-8
class A(object):
    def __init__(self):  # 构造函数
        print("构造函数")


a = A()             # 创建对象
构造函数__init__

 创建对象:对象名 = 类名(),当类的构造函数,有形参时,需要传递实参,self这个额外参数忽略看做this即可

a = A()             # 创建对象  a是变量  A是类名
创建实例对象

 继承:如果实例化子类对象时候,子类没有提供构造函数就会自动调用父类的构造函数。子类一般情况下不会自动调用父类的构造函数,需要手动调用,子类调用父类,①直接使用类名调用②super关键字调用。python不存在二义性问题,使用的就近原则。issubclass()函数判断一个类是不是另一个类的子类。

类的私有属性:类的私有属性使用双下划线_ _开头。不能直接用类名访问(系统就是把下划线开头的变量名字改变了,所以访问不了,可以使用另一种方式访问,就用它改变后的名字)。

原文地址:https://www.cnblogs.com/PrideAssassin/p/11544270.html