Python类入门

一、类的初级使用

1.类(Class)

用来描述具有相同属性和方法的对象集合。

类定义了每个对象所共有的属性和方(对象是类的实例)

2.实例化

创建一个类的实例,叫做类的实例化,结果是生成一个具体的对象

3.方法

类中定义的函数

4.对象

通过类定义的数据结构实例。包含类中定义的变量与方法

 

梳理以上4点: 类可以当做一个蓝图,而对象就是根据蓝图创造出来的具体存在体,蓝图在设计的时候规定了他有什么功能(也就是方法),而创建对象的过程称为实例化

 

5.定义类和生成对象

如下,通过class 加类名创建类,注意命名,类名的第一个字母最好为大写

通过类名()的形式创建对象,可以通过变量.对象名来调用类中的变量

>>> class Mode:
...   a=10
... 
>>> obj=Mode()
>>> print(obj.a)
10

 

6.构造器方法

当实例化对象时,构造器方法默认被执行。构造器方法一般用于初始化对象

实例本书作为第一个参数,传递给self,如下

>>> class BearToy:
...   def __init__(self,size,color):
...     self.size=size
...     self.color=color
... 
>>> tidy=BearToy('small','orange')
>>> print(tiry)
>>> print(tidy.size,tidy.color)
small orange
 

7.在类中定义方法

类中定义的方法需要绑定在具体的实例,由实例调用

实例方法需要明确调用

>>> class BearToy:
...   def __init__(self,size,color):
...     self.size=size
...     self.color=color
...   def speak(self):

...       printf("hello!")
>>> tidy=BearToy('small','orange')
>>> print(tiry)
>>> print(tidy.size,tidy.color)
small orange

>>>tidy.speak()
hello!

 

二、类的高级使用

1.类的组合

类被定义后,目标是把它当做一个模块来使用,并把这些对象嵌入到你的代码中去

组合让不同的类混合,将A类加入到B类,增加B类的功能和代码重用性

可以在一个大点的类中创建其他类的实例,实现一些其他属性和方法来增强这个类的功能

2.组合实例

将一个类作为另一个类的组件

>>> class Manufacture:
...   def __init__(self,phone,email):
...       self.phone=phone
...       self.email=email
... 
>>> class BearToy:
...   def __init__(self,size,color,phone,email):
...     self.size=size
...     self.color=color
...     self.vendor=Manufacture(phone,email)
... 
>>> m=Manufacture('121212','21@qq.com')
>>> b=BearToy('small','orange',m.phone,m.email)
>>> print(b.vendor.email)
21@qq.com
 

3.继承

当设计相同的类但有一些不同的功能时,我们将这些不同的类叫做派生类,但这些类有共同的父类,他们继承与父类

创建子类只需要在圆括号中写明从哪个父类继承即可

继承属性:

继承描述了基类的属性如何‘遗传’给派生类

子类可以继承它的基类的任何属性,不管是数据属性还是方法

>>> class BearToy:
...   def __init__(self,size,color):
...     self.size=size
...     self.color=color
... 
>>> class NewBearToy(BearToy):
...   pass
... 
>>> nb=NewBearToy('small','orange')
>>> print(nb.size,nb.color)
small orange

覆盖方法:

如果子类中有和父类同名的方法,父类方法将被覆盖,如果需要访问父类的方法,则需要调用一个未绑定的父类方法,明确给出子类的实例

>>> class A:
...   def say(self):
...     print("father")
... 
>>> class B(A):
...   def say(self):
...     print("son")
... 
>>> b=B()
>>> b.say()
son
 

多重继承:

python允许多重继承,即一个类可以是多个父类的子类,子类可以拥有所有父类的属性

>>> class A:
...   def say(self):
...     print('mon')
... 
>>> class B:
...   def say2(self):
...     print('father')
... 
>>> class C(A,B):
...   pass
... 
>>> c=C()
>>> c.say()
mon
>>> c.say2()
father
 

4.类的特殊方法

1)__init__

实例化类实例时默认调用的方法,用于接收参数

>>> class BearToy:
...   def __init__(self,size,color):
...     self.size=size
...     self.color=color
>>> nb=NewBearToy('small','orange')

2)__str__

返回字符串,用于定义类的输出结果,常规输出:<class '__main__.类名'>,__str__可以自定义输出结果

>>> class BearToy():
...   def __init__(self,size,color):
...     self.size=size
...     self.color=color
...   def __str__(self):
...     return '<Bear:%s%s>' % (self.size,self.color)
... 
>>> bear=BearToy('small','orange')
>>> print(bear)
<Bear:smallorange>
 

3)__call__

通过类()调用类的输出

>>> class BearToy():
...   def __init__(self,size,color):
...     self.size=size
...     self.color=color
...   def __call__(self):
...     print('I am a %s bear' % self.size)
... 
>>> bear=BearToy('small','orange')

>>>bear()

'I am a orange bear

三、练习程序

1.编写游戏人物

要求:

  1. 创建游戏角色类
  2. 游戏人物角色拥有名字、武器等属性
  3. 游戏人物具有攻击和行走的方法
  4. 武器通过武器类实现

方案:

由于游戏角色和武器都由类实现,而这个两个类又完全不同,所以可以通过组合来实现。将武器类的一个实例作为游戏人物的一个属性。

#!/bin/usr/env python3
#encode=utf-8

#定义武器类
class Weapon:
  def __init__(self,name,strength):
    self.name=name
    self.strength=strength

#定义人物类

class Warrior:

  #将武器类的实例添加到人物类的构造函数中
  def __init__(self,name,weapon):
    self.name=name
    self.weapon=weapon

  def speak(self,words):
    print('I am %s,%s' % (self,name,words))

  def show_me(self):
    print('我是%s,我是一个战士、我的武器是%s' % (self.name,self.weapon.name))

if __name__=='__main__':
  blade=Weapon('青龙偃月刀',100)
  print(blade.name,blade.strength)
  gy=Warrior('关羽',blade)
  gy.show_me()
  cz = Weapon('禅杖', 100)
  lzs = Warrior('鲁智深', cz)

青龙偃月刀 100
我是关羽,我是一个战士、我的武器是青龙偃月刀
我是鲁智深,我是一个战士、我的武器是禅杖

 

2.出版商程序

要求:

  1. 为出版商编写一个Book类
  2. Book类有书名、作者、页数等属性
  3. 打印实例时,输出书名
  4. 调用实例时,显示该书由哪个作者编写

方案:

创建一个类,类中创建3种方法:

  • 1.__init__方法:__init__方法用于初始化实例属性,创建对象后会自动调用__init__方法,属于构造器方法,此处初始化了书名及作者两个属性
  • 2.__str__方法:创建对象后,打印实例对象pybook,返回书名,打印出书名
  • 3.__call__方法:创建对象后,可以像调用函数一样调用该方法,模拟函数的行为,打印出书名及作者

#!/usr/bin/env python3
class Book:
    def __init__(self, title, author):
        self.title = title
        self.author = author
    def __str__(self):
        return '<Book: %s>' % self.title
    def __call__(self):
        print('《%s》 is written by %s.' % (self.title, self.author))
if __name__ == '__main__':
    pybook = Book('Core Python', 'Weysley')
    print(pybook)  # 调用__str__
    pybook()   # 调用__call__

 <Book: Core Python>
《Core Python》 is written by Weysley.

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值