您好!此笔记的文本和代码以网盘形式分享于文末!
因个人能力有限,错误处欢迎大家交流和指正!基础部分内容简单,但多且零散!
# # 面向对象进阶
# # isinstance(obj,cls)检查是否obj是否是类 cls 的对象
#
#
# class Foo(object):
# pass
#
#
# obj = Foo()
# print(isinstance(obj, Foo))
#
#
# # issubclass(sub, super)检查sub类是否是 super 类的派生类
# class Foo(object):
# pass
#
#
# class Bar(Foo):
# pass
#
#
# print(issubclass(Bar, Foo))
"""
反射:主要是指程序可以访问、检测和修改它本身状态或行为的一种能力(自省)
python面向对象中的反射:通过字符串的形式操作对象相关的属性。
python中的一切事物都是对象(都可以使用反射)
四个可以实现自省的函数(适用于类和对象)
hasattr
getattr
setattr
delattr
"""
# class Foo:
# f = '类的静态变量'
#
# def __init__(self,name,age):
# self.name=name
# self.age=age
#
# def say_hi(self):
# print('hi,%s'%self.name)
#
#
# obj = Foo('egon', 73)
#
# # 检测是否含有某属性
# print(hasattr(obj, 'name'))
# print(hasattr(obj, 'say_hi'))
#
# # 获取属性
# n = getattr(obj, 'name')
# print(n)
# func = getattr(obj, 'say_hi')
# func()
#
# # 报错
# print(getattr(obj, 'aaaaaaaa', '不存在啊'))
#
# # 设置属性
# setattr(obj, 'sb', True)
# setattr(obj, 'show_name', lambda self: self.name + 'sb')
# print(obj.__dict__)
# print(obj.show_name(obj))
#
# # 删除属性
# delattr(obj, 'age')
# delattr(obj, 'show_name')
# # 不存在,则报错
# delattr(obj, 'show_name111')
#
# print(obj.__dict__)
# class Foo(object):
# staticField = "old boy"
#
# def __init__(self):
# self.name = 'wupeiqi'
#
# def func(self):
# return 'func'
#
# @staticmethod
# def bar():
# return 'bar'
#
#
# print(getattr(Foo, 'staticField'))
# print(getattr(Foo, 'func'))
# print(getattr(Foo, 'bar'))
# import sys
#
#
# def s1():
# print('s1')
#
#
# def s2():
# print('s2')
#
#
# this_module = sys.modules[__name__]
#
# print(hasattr(this_module, 's1'))
# print(getattr(this_module, 's2'))
# 一道面试题
class Person:
def __init__(self,name,age,sex):
self.name = name
self.age = age
self.sex = sex
def __hash__(self):
return hash(self.name+self.sex)
def __eq__(self, other):
if self.name == other.name and self.sex == other.sex:return True
p_lst = []
for i in range(84):
p_lst.append(Person('egon', i, 'male'))
print(p_lst)
print(set(p_lst))
愿有更多的朋友,在网页笔记结构上分享更逻辑和易读的形式:
链接:暂无
提取码:暂无