Python类与对象基础

1、类定义

语法格式如下:

class ClassName:
    <statement-1>
    .
    .
    .
    <statement-N>

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

2、基本操作

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

#属性引用使用和 Python 中所有的属性引用一样的标准语法:obj.name。
#类对象创建后,类命名空间中所有的命名都是有效属性名。所以如果类定义是这样:
class MyClass:
    i = 12345
    def f(self):
        return 'hello world'
# 实例化类
x = MyClass()
# 访问类的属性和方法
print("MyClass 类的属性 i 为:", x.i)
print("MyClass 类的方法 f 输出为:", x.f())
# 以上创建了一个新的类实例并将该对象赋给局部变量 x,x 为空的对象。
print()

3、__init__函数

# 类有一个名为 __init__() 的特殊方法(构造方法),该方法在类实例化时会自动调用,像下面这样:
# def __init__(self):
#     self.data = []
# 类定义了 __init__() 方法,类的实例化操作会自动调用 __init__() 方法。如下实例化类 MyClass,对应的 __init__() 方法就会被调用:
# x = MyClass()
# 当然, __init__() 方法可以有参数,参数通过 __init__() 传递到类的实例化操作上。例如:
class Complex:
    def __init__(self, realpart, imagpart):
        self.r = realpart
        self.i = imagpart
x = Complex(3.0, -4.5)
print(x.r, x.i)   # 输出结果:3.0 -4.5
print()

4、self具体含义

# self代表类的实例,而非类
# 类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self。
# 解释器会自动把调用该函数的对象作为第一个参数传递给self
class Test:
    def prt(self):
        print(self)  #<__main__.Test object at 0x000002166A209790>
        print(self.__class__)  # <class '__main__.Test'>
        pass
    pass
t = Test()
t.prt()
print()
'''
以上实例执行结果为:

<__main__.Test instance at 0x100771878>
__main__.Test
'''
# 从执行结果可以很明显的看出,self 代表的是类的实例,代表当前对象的地址,而 self.class 则指向类。
# 证明如下:
class Verification:
    def Get_Self_Id(self):
        print(id(self))
        pass
    pass
ver = Verification()
print(id(ver))
ver.Get_Self_Id()
print()
  • 注意:self 不是 python 关键字,我们把他换成 runoob 也是可以正常执行的:
class Test:
    def prt(runoob):
        print(runoob)
        print(runoob.__class__)
 
t = Test()
t.prt()

以上实例执行结果为:

<__main__.Test instance at 0x100771878>
__main__.Test

5、小结

# 在类的内部,使用 def 关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数 self, 且为第一个参数,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 说: 我 %d 岁。" % (self.name, self.age))

# 实例化类
p = people('runoob', 10, 30)
p.speak()

6、案例(对打小游戏)

'''
双人对打小游戏
属性:name,blood
方法:Normal_Attack:一次掉10滴血
     Special_Attack:一次掉20滴血
     Add_Blood:加血5滴
     __str__打印玩家状态
'''
class Person:
    def __init__(self, name, blood, energy):
        self.m_Name = name
        self.m_Blood = blood
        self._Energy = energy
        self.m_Blood_Bag = 3
        pass
    def Normal_Attack(self, opponent):
        opponent.m_Blood -= 10
        self._Energy -= 5
        print('{}对{}普攻一下'.format(self.m_Name, opponent.m_Name))
        pass
    def Special_Attack(self,opponent):
        opponent.m_Blood -= 20
        self._Energy -= 10
        print('{}对{}放大招了'.format(self.m_Name, opponent.m_Name))
        pass
    def Add_Blood(self):
        self.m_Blood += 5
        self.m_Blood_Bag -= 1
        print('{}吃了个血瓶'.format(self.m_Name))
        pass
    def __str__(self):
        return '{}此时有{}滴血,{}能量'.format(self.m_Name, self.m_Blood, self._Energy)
    pass
p1 = Person('勇士', 100, 60)
p2 = Person('憨批易隆平', 100, 60)
print(p1, p2)
p1.Normal_Attack(p2)
print(p2)
p2.Add_Blood()
print(p2)
p2.Special_Attack(p1)
print(p1, p2)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值