python3 类_Python 3 入门系列教程:Python 类

和其它编程语言相比,Python 在尽可能不增加新的语法和语义的情况下加入了类机制。

Python中的类提供了面向对象编程的所有基本功能:类的继承机制允许多个基类,派生类可以覆盖基类中的任何方法,方法中可以调用基类中的同名方法。

对象可以包含任意数量和类型的数据。

类定义

语法格式如下:

class ClassName:

    <statement-1>

    .

    .

    .

    <statement-N>

类实例化后,可以使用其属性,实际上,创建一个类之后,可以通过类名访问其属性。

类对象

类对象支持两种操作:属性引用和实例化。

属性引用使用和 Python 中所有的属性引用一样的标准语法:obj.name。

类对象创建后,类命名空间中所有的命名都是有效属性名。所以如果类定义是这样:

class MyClass:

    """A simple example class"""

    i = 12345

    def f(self):

        return 'hello world'

实例化类:

x = MyClass()

以上创建了一个新的类实例并将该对象赋给局部变量 x,x 为空的对象。

很多类都倾向于将对象创建为有初始状态的。因此类可能会定义一个名为 __init__() 的特殊方法(构造方法),像下面这样:

def __init__(self):

    self.data = []

类定义了 __init__() 方法的话,类的实例化操作会自动调用 __init__() 方法。所以在下例中,可以这样创建一个新的实例:

x = MyClass()

当然, __init__() 方法可以有参数,参数通过 __init__() 传递到类的实例化操作上。例如:

>>> class Complex:

...     def __init__(self, realpart, imagpart):

...         self.r = realpart

...         self.i = imagpart

...

>>> x = Complex(3.0, -4.5)

>>> x.r, x.i

(3.0, -4.5)

类的方法

在类地内部,使用def关键字可以为类定义一个方法,与一般函数定义不同,类方法必须包含参数self,且为第一个参数:

#类定义

class people:

    #定义基本属性

    name = ''

    age = 0

    #定义私有属性,私有属性在类外部无法直接进行访问

    __weight = 0

    #定义构造方法

    def __init__(self,n,a,w):

        self.name = n

        self.age = a

        self.__weight = w

    def speak(self):

        print("%s is speaking: I am %d years old" %(self.name,self.age))

p = people('tom',10,30)

p.speak()

继承

Python 同样支持类的继承,如果一种语言不支持继承就,类就没有什么意义。派生类的定义如下所示:

class DerivedClassName(BaseClassName1):

    <statement-1>

    .

    .

    .

    <statement-N>

需要注意圆括号中基类的顺序,若是基类中有相同的方法名,而在子类使用时未指定,python从左至右搜索 即方法在子类中未找到时,从左到右查找基类中是否包含方法。

BaseClassName(示例中的基类名)必须与派生类定义在一个作用域内。除了类,还可以用表达式,基类定义在另一个模块中时这一点非常有用:

class DerivedClassName(modname.BaseClassName):

实例

#单继承示例

class student(people):

    grade = ''

    def __init__(self,n,a,w,g):

        #调用父类的构函

        people.__init__(self,n,a,w)

        self.grade = g

    #覆写父类的方法

    def speak(self):

        print("%s is speaking: I am %d years old,and I am in grade %d"%(self.name,self.age,self.grade))

s = student('ken',20,60,3)

s.speak()

多重继承

Python同样有限的支持多继承形式。多继承的类定义形如下例:

class DerivedClassName(Base1, Base2, Base3):

    <statement-1>

    .

    .

    .

    <statement-N>

需要注意圆括号中父类的顺序,若是父类中有相同的方法名,而在子类使用时未指定,python从左至右搜索 即方法在子类中未找到时,从左到右查找父类中是否包含方法。

#另一个类,多重继承之前的准备

class speaker():

    topic = ''

    name = ''

    def __init__(self,n,t):

        self.name = n

        self.topic = t

    def speak(self):

        print("I am %s,I am a speaker!My topic is %s"%(self.name,self.topic))

#多重继承

class sample(speaker,student):

    a =''

    def __init__(self,n,a,w,g,t):

        student.__init__(self,n,a,w,g)

        speaker.__init__(self,n,t)

test = sample("Tim",25,80,4,"Python")

test.speak()#方法名同,默认调用的是在括号中排前地父类的方法

类属性与方法

类的私有属性

__private_attrs:两个下划线开头,声明该属性为私有,不能在类地外部被使用或直接访问。在类内部的方法中使用时 self.__private_attrs。

类的方法

在类地内部,使用def关键字可以为类定义一个方法,与一般函数定义不同,类方法必须包含参数self,且为第一个参数

类的私有方法

__private_method:两个下划线开头,声明该方法为私有方法,不能在类地外部调用。在类的内部调用 slef.__private_methods。

类的专有方法:

  • __init__ 构造函数,在生成对象时调用

  • __del__ 析构函数,释放对象时使用

  • __repr__ 打印,转换

  • __setitem__按照索引赋值

  • __getitem__按照索引获取值

  • __len__获得长度

  • __cmp__比较运算

  • __call__函数调用

  • __add__加运算

  • __sub__减运算

  • __mul__乘运算

  • __div__除运算

  • __mod__求余运算

  • __pow__称方

推荐资料:

0.最新全套完整Python视频教程,学Python编程开发看它就够了!直接下载

1.JAVA面试视频+题库+笔试+简历模板

看完本文有收获?请转发分享给更多人

关注「Python编程开发」,做顶尖开发工程师!

2919444c361cf3b96aba7a52017f5661.png

喜欢就点一下「在看」呗~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值