CodingLifeDay7:Python:面向对象基础知识Section4

1,运算符重载

# 这是一个用于描述向量的类,然而它的输出似乎并不符合我们的期望。
class vector:
    def __init__(self,x,y):
        self.x = x
        self.y = y

p1 = vector(3,4)
p2 = vector(6,7)
print(p1)                   # 我们希望能打印出一个坐标。事实上:<__main__.vector object at 0x0000020F7D17DFD0>
print(p1+p2)                # 我们希望能打印出和向量的坐标。事实上:TypeError: unsupported operand type(s) for +: 'vector' and 'vector'

# 第一个问题的解决需要重写__str__()方法,这个方法是类自带的,用于控制输出的格式。修改如下:
def __str__(self):
    return f"({self.x},{self.y})"
# 这样就能打印出实例所对应的坐标而非内存地址。

# 第二个问题的解决涉及到运算符重载,也就是对运算符的含义进行重写。类中加号的方法是__add__,因此重写如下:
def __add__(self, other):
    x = self.x + other.x
    y = self.y + other.y
    return vector(x, y)   # 将结果转化为类的实例再返回可以保证输出格式的一致

# 将上面两个重写的函数放到类vector中再次运行即可解决问题

运算符及对应方法名总结

一元运算符

二元运算符

比较运算符


2,反射

反射:通过字符串形式导入模块、寻找函数、增删成员。

module = input('Input module name:')
Module = __import__(module, fromlist=True)      # 导入模块,模块名字是module,Module相当于模块的别名
Module.f()                                      # 调用导入模块的f函数
function_name = input('Input function name:')
function = getattr(Module, function_name)       # 调用模块中的function_name函数
function()

①getattr()函数

getattr(object,name,str)

1:寻找属性,存在返回属性值,不存在报错或返回设定的值;

2:寻找函数,存在返回函数地址,不存在报错或返回设定的值。

class test:
    name = 'test_class'
    def test_function(self):
        print("hello,world")

test_object = test()

print(getattr(test_object,'name','Not found.'))                      # test_class
print(getattr(test_object,'age','Not found.'))                       # Not found.
print(getattr(test,'test_function','I found this function.'))        # <function test.test_function at 0x000001EC27BF7430>
print(getattr(test,'it','No this function.'))                        # No this function.

②hasattr()函数

hasattr(object,name)

寻找属性或函数,存在返回True,不存在返回False

print(hasattr(test,'name'))           # True
print(hasattr(test,'age'))            # False
print(hasattr(test,'test_function'))  # True
print(hasattr(test,'it'))             # False

③setattr()函数

setattr(object,name,value) == object.name = value

④delattr()函数

delattr(object,name) == del object.name

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值