python get rect 函数_Python基础进阶:从函数到高级魔法方法

魔法方法

1、魔法方法总是被双下划线包围,例如__init__。

魔法方法是面向对象的 Python 的一切,如果你不知道魔法方法,说明你还没能意识到面向对象的 Python 的强大。

魔法方法的“魔力”体现在它们总能够在适当的时候被自动调用。

魔法方法的第一个参数应为cls(类方法) 或者self(实例方法)。

2、基本的魔法方法(1)__init__(self[, ...]) 构造器,当一个实例被创建的时候调用的初始化方法。

例子:

class Rectangle:

def __init__(self, x, y):

self.x = x

self.y = y

def getPeri(self):

return (self.x + self.y) * 2

def getArea(self):

return self.x * self.y

rect = Rectangle(4, 5)

print(rect.getPeri()) # 18

print(rect.getArea()) # 20

(2)__str__(self):

当你打印一个对象的时候,触发__str__

当你使用%s格式化的时候,触发__str__

str强转数据类型的时候,触发__str__

(3)__repr__(self):

repr是str的备胎

有__str__的时候执行__str__,没有实现__str__的时候,执行__repr__

repr(obj)内置函数对应的结果是__repr__的返回值

当你使用%r格式化的时候 触发__repr__

例子:

class Cat:

"""定义一个猫类"""

def __init__(self, new_name, new_age):

"""在创建完对象之后 会自动调用, 它完成对象的初始化的功能"""

self.name = new_name

self.age = new_age

def __str__(self):

"""返回一个对象的描述信息"""

return "名字是:%s , 年龄是:%d" % (self.name, self.age)

def __repr__(self):

"""返回一个对象的描述信息"""

return "Cat:(%s,%d)" % (self.name, self.age)

def eat(self):

print("%s在吃鱼...." % self.name)

def drink(self):

print("%s在喝可乐..." % self.name)

def introduce(self):

print("名字是:%s, 年龄是:%d" % (self.name, self.age))

# 创建了一个对象

tom = Cat("汤姆", 30)

print(tom) # 名字是:汤姆 , 年龄是:30

print(str(tom)) # 名字是:汤姆 , 年龄是:30

print(repr(tom)) # Cat:(汤姆,30)

tom.eat() # 汤姆在吃鱼....

tom.introduce() # 名字是:汤姆, 年龄是:30

3、算术运算符

类型工厂函数,指的是“不通过类而是通过函数来创建对象”。

__mul__(self, other)定义乘法的行为:*

__truediv__(self, other)定义真除法的行为:/

__floordiv__(self, other)定义整数除法的行为://

__mod__(self, other) 定义取模算法的行为:%

__divmod__(self, other)定义当被 divmod() 调用时的行为

divmod(a, b)把除数和余数运算结果结合起来,返回一个包含商和余数的元组(a // b, a % b)。

4、属性访问

__getattr__(self, name): 定义当用户试图获取一个不存在的属性时的行为。

__getattribute__(self, name):定义当该类的属性被访问时的行为(先调用该方法,查看是否存在该属性,若不存在,接着去调用__getattr__)。

__setattr__(self, name, value):定义当一个属性被设置时的行为。

__delattr__(self, name):定义当一个属性被删除时的行为。

例子:

class C:

def __getattribute__(self, item):

print('__getattribute__')

return super().__getattribute__(item)

def __getattr__(self, item):

print('__getattr__')

def __setattr__(self, key, value):

print('__setattr__')

super().__setattr__(key, value)

def __delattr__(self, item):

print('__delattr__')

super().__delattr__(item)

c = C()

c.x

# __getattribute__

# __getattr__

c.x = 1

# __setattr__

del c.x

# __delattr__

5、迭代器

迭代是 Python 最强大的功能之一,是访问集合元素的一种方式。

迭代器是一个可以记住遍历的位置的对象。

迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。

迭代器只能往前不会后退。

字符串,列表或元组对象都可用于创建迭代器:

例子:

links = {'B': '百度', 'A': '阿里', 'T': '腾讯'}

for each in links:

print('%s -> %s' % (each, links[each]))

'''

B -> 百度

A -> 阿里

T -> 腾讯

'''

for each in iter(links):

print('%s -> %s' % (each, links[each]))

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值