Python资料之class类

本文介绍了Python中的类(class)和对象(object)的概念,包括类的定义、实例化、__init__方法、self关键字以及对象的创建。此外,还讨论了面向对象的特性如封装、继承和多态,强调了新式类与经典类的区别,并提供了多态的Python示例。通过这些内容,帮助读者理解Python的OOP编程基础。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Class 类:
  一个类即是对一类拥有相同属性的对象的抽象。在类中定义了这些对象的都具备的属性(variables(data))、共同的方法


class Role(object): #定义一个类

    def __init__(self,name,money=15000): #初始化函数,在生成一个角色时要初始化的一些属性就填写在这里

        self.name = name #__init__中的第一个参数self,
        self.money = money

1、class是定义类的语法,Role是类名,(object)是新式类的写法
2、__init__()叫做初始化方法(或构造方法), 在类被调用时,这个方法会自动执行,进行一些初始化的动作。
3、 self代表实例化的对象,在类实例化的时候会自动传值。

例如r = Role('Jack'),在实例化的过程中,会将实例r的内存地址传给Role()。

Object 对象
  一个对象即是一个类的实例化后实例,一个类必须经过实例化后方可在程序中调用,一个类可以实例化多个对象,每个对象亦可以有不同的属性,就像人类是指所有人,每个人是指具体的对象,人与人之前有共性,亦有不同。

实例化:
把虚拟的抽象的类变成一个具体对象。

r = Role('Jack')

在执行r = Role(‘Jack’)时,python的解释器其实干了两件事:
1.在内存中开辟一块空间指向r这个变量名
2.调用Role这个类并执行其中的init(…)方法,相当于Role.init(‘r’,’Jack’),通过self.name = name,r和Jack这个值就关联起来,把值存入r的内存空间中。

在类中定义方法:

class Role(object): 
    def __init__(self,name): 
        self.name = name

    def buy_gun(self,gun_name):
        print(“%s has just bought %s” %(self.name,gun_name) )

调用类的方法:

r = Role('Jack')
r.buy_gun("AK47”) 

r.buy_gun(“AK47”) ,执行时python 会自动帮你转成 Role.buy_gun(‘r’,’B21’)


面向对象的特性:
1、封装:

  把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。

2、继承:

  一个类可以派生出子类,在这个父类里定义的属性、方法自动被子类继承。这样就可以使用原有类的所有功能,并在无需重新编写原有类的情况下对这些功能进行扩展。

  继承的类称为“子类”或“派生类”,被继承的类称为“基类”、“父类”或“超类”。继承的过程,其实就是从一般到特殊的过程。

  要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现。一般情况下,一个子类只能有一个基类,要实现多重继承,可以通过多级继承来实现。

  继承的实现方式:实现继承、接口继承。

1、实现继承是指使用基类的属性和方法而无需额外编码的能力;
2、接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力(子类重构爹类方法);

OO开发范式大致为:

划分对象→抽象类→将类组织成为层次化结构(继承和合成)→用类与实例进行设计和实现

抽象类:

仅定义将由子类创建的一般属性和方法。

实例:Teacher类继承SchoolMember类

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


class Teacher(SchoolMember):  #继承SchoolMember
    def __init__(self, name, age, course, salary):
        super(Teacher, self).__init__(name, age)
        self.course = course
        self.salary = salary

3、多态
  多态性(polymorphisn)是将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说就是一个接口,多种实现。

  那么,多态的作用是什么呢?封装可以隐藏实现细节,使得代码模块化,继承可以扩展已存在的代码模块(类),它们的目的都是为了——代码重用。而多态则是为了实现另一个目的——接口重用!多态的作用,就是为了类在继承和派生的时候,保证使用“家谱”中任一类的实例的某一属性时的正确调用。

  Pyhon 很多语法都是支持多态的,比如 len(),sorted(), 你给len传字符串就返回字符串的长度,传列表就返回列表长度。

Python多态示例

# _*_coding:utf-8_*_

class Animal(object):
    def __init__(self, name):  # Constructor of the class
        self.name = name

    def talk(self):  # Abstract method, defined by convention only
        raise NotImplementedError("Subclass must implement abstract method")

class Cat(Animal):
    def talk(self):
        print('%s: 喵喵喵!' % self.name)

class Dog(Animal):
    def talk(self):
        print('%s: 汪!汪!汪!' % self.name)

def func(obj):  # 一个接口,多种形态
    obj.talk()


c1 = Cat('小晴')
d1 = Dog('李磊')
func(c1)
func(d1)

示例中:
1、Animal类是一个父类,为子类提供共有的类属性。同时,定义一个抽象方法,形成接口。
2、Cat和Dog两个子类,在继承Animal类的同时实现Animal类中的抽象方法。
3、在主程序中定义一个函数,def func(obj)去调用抽象方法,即接口。


新式类和经典类:
1)写法不同,新式类需要显式继承object类

经典类
class A:
    pass

新式类
class B(object):
    pass

Python 2.x中默认都是经典类,只有显式继承了object才是新式类
Python 3.x中默认都是新式类,不必显式的继承object

2)在多继承中,新式类采用广度优先搜索,而旧式类是采用深度优先搜索。即经典类多继承属性搜索顺序: 先深入继承树左侧,再返回,开始找右侧;新式类多继承属性搜索顺序: 先水平搜索,然后再向上移动

其他:

新式类对象可以直接通过__class__属性获取自身类型:type
新式类增加了__slots__内置属性, 可以把实例属性的种类锁定到__slots__规定的范围之中
新式类增加了__getattribute__方法

新式类更符合OOP编程思想,统一了python中的类型机制。



参考资料:
http://www.cnblogs.com/alex3714/articles/5188179.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值