-
通过isinstance()方法,可以判断一个对象是否是某个类型,从某种意义上来讲,通过isinstance()方法,我们获取到了一个对象的一些信息,那有没有别的方法可以获取到对象更多的信息呢?
答:(1)通过type()函数,可以获得变量的类型。(2)通过dir()方法,可以获取变量的所有属性。
dir列出的属性中,有很多是以下划线开头和结尾的,这些都是特殊的方法,称为内建方法,在后面,我们还会学习这些方法。
对于自定义对象的实例变量,dir()返回所有实例属性,包括__class__这类有特殊意义的属性。注意到方法who也是p的一个属性。
dir()返回的属性是字符串列表,如果已知一个属性名称,要获取或者设置对象的属性,就需要用 getattr() 和 setattr( )函数了。
getattr(p, 'name') # 获取name属性 setattr(p, 'name', 'Adam') # 设置新的name属性 # 但是属性不存在,报错:AttributeError: 'Person' object has no attribute 'age' getattr(s, 'age', 20) # 获取age属性,如果属性不存在,就返回默认值20
#任务: # coding=utf-8 # 希望除了name和gender外,可以提供任意额外的关键字参数,并绑定到实例,请修改 Person 的__init__()定义,完成该功能。 # **kwargs 可变关键字参数,字典形式(k-v) class Person(object): def __init__(self, name, gender, **kwargs): self.name = name self.gender = gender for k, v in kwargs.items(): setattr(self, k, v) # 实例1: p1 = Person('莲华', '男', age = 24, work = '巫师') tamplate1 = '我叫{n},性别{g},{a}岁,任职{w}' str1 = tamplate1.format(n = p1.name, g = p1.gender, a = p1.age, w = p1.work) print(str1) # 实例2: p2 = Person('裘葵', '女', blood = 30000, work = '战士') tamplate2 = '我叫{n},性别{g},任职{w},血量{b}' str2 = tamplate2.format(n = p2.name, g = p2.gender, b = p2.blood, w = p2.work) print(str2)
查看全部 -
Python3.x 和 Python2.x 的一个区别是: Python 3 可以使用直接使用 super().xxx 代替 super(Class, self).xxx
查看全部 -
函数作为参数输入时候不要输入(),只需要输入函数名就可以
查看全部 -
属性也可以和普通变量一样进行运算。查看全部
-
类属性和实例属性要是开头有“__”的时候,就是私有属性,类私有属性和实例私有属性,都不可以通过XXX.__类属性名(__实例属性名)来进行访问。
外部操作私有属性:通过定义类或者实例方法
查看全部 -
你好,这是必应。😊
sys.path是Python的一个列表,用于存储模块的搜索路径。当你使用import语句导入模块时,Python会在sys.path中列出的路径中查找相应的模块。要使用sys.path增加路径,你可以使用sys.path.append()函数,将新的路径添加到列表的末尾。
例如,如果你想要导入当前目录上级目录的包,你可以在你的代码中写:
import sys
sys.path.append('../') # 添加上级目录的路径import package # 导入上级目录的包复制
这样,Python就可以在上级目录中找到package这个包,并导入它。需要注意的是,这种方法只对当前会话有效,如果你重启Python解释器,sys.path会恢复到默认值。如果你想要永久增加路径,你可以修改PYTHONPATH环境变量,或者创建一个.pth文件放在site-packages目录下。
希望这能帮助你理解如何使用sys.path增加路径。如果你还有其他问题,欢迎继续提问。😊
查看全部 -
文件对象提供readlines()方法,可以读取多行字符,返回一个列表。它提供一个hint参数,表示指定读取的字节数,没有指定则默认以列表的形式返回文件所有的字符串。
课件应该有问题,指定的是字节数,而不是行数
查看全部 -
#闭包
def outer():
name="python"
def inner(): # outer函数内部定义的函数
return name
return inner # 返回该内部函数
print(outer()())
#此时执行外层函数outer(),返回的是内层函数的函数引用(函数名称)--inner,
# 想要执行内层函数,需要在outer()后边再加个括号,即outer()(),才会让内层函数执行。查看全部 -
import socket
socket.socket()
服务端
.bind()绑定ip、端口
.listen()监听
.recv()接收
.send()发送
客户端
.connect()连接服务端的ip和端口
.send()发送
.recv()接收
发送和接收信息,是两端都可以有的功能,两端都需要建立socket后,才能进行后续操作
变量名1 = socket.socket()
#这是新建socket
变量名1.bind(‘ip地址',端口)
#这是绑定ip和端口,ip地址是字符串,端口是数字
变量名1.listen()
#这是监听连接
变量名2,addr = 变量名1.accept()
#这里是调用了socket的accept()函数,接受连接,并且把接受的连接命名为变量名2,括号内不能有参数
变量名3 = 变量名2.recv(1024)
#把在连接里收到的内容存在变量名3中
变量名1.send()
#这是发送数据的函数查看全部 -
class person:
def __init__(self, name, gender):
self.name = name
self.gender = gender
def who(self):
return 'i am a person , my name is %s' % self.name
class student(person):
def __init__(self, name, gender, score):
super(student, self).__init__(name, gender)
self.score = score
def who(self):
return 'i am a student, my name is %s' % self.name
class teacher(person):
def __init__(self, name, gender, course):
super(teacher, self).__init__(name, gender)
self.course = course
def who(self):
return 'i am a teacher, my name is %s' % self.name
class skm:
def __init__(self, name):
self.name = name
def who(self):
return ' i can play'
class baskm(skm, teacher):
def __init__(self, name, course):
super(baskm, self).__init__(name)
self.course = course
def who(self):
return self.name + ' is a teacher,'+ self.name +' can play ' + self.course
class fbskm(skm, student):
def __init__(self, name, course):
super(fbskm, self).__init__(name)
self.course = course
def who(self):
return self.name + ' is a student,'+ self.name +' can play ' + self.course
p1 = baskm('bob', 'basketball')
print(p1.who())
p2 = fbskm('Lily','football')
print(p2.who())查看全部 -
r1 + r2 就相当于r1.__add__(r2)
Rational(1, 2) Rational(2, 3)
p q p q
r1 = Rational(1, 2)
中的(1,2)代入到Rational的__init_中,此时
即为:self.p = 1
self.q = 2
self.p * r.q + self.q * r.p, self.q * r.q
1 * 3 + 2 * 2 , 2 * 3
(7 , 6)
查看全部 -
seek()方法在a+追加读写的方式,如果在r的方式中,文件游标直接在首部位置
查看全部 -
只要重写了 __str__()方法,不管是打印对象还是打印对象的字符串格式,其调用的都是 __str__()方法,所以显示的都是重写的__str__()结果。也就是说,print(str(obj)) 和 print(obj) 是一样的。
而只有在控制台(window下的cmd,命令提示符)中,在python环境下直接输入(不是打印)obj,回车,调用的才是 __repr__()方法。如果没有重写该方法,还是会显示对象所在的地址。
查看全部 -
# Enter a code
class person(object):
def __init__(self,name,gender):
self.name = name
self.gender = gender
def who(self):
return 'i am a person , my name is %s'%self.name
class student(person):
def __init__(self,name,gender,score):
super(student,self).__init__(name,gender)
self.score = score
def who(self):
return 'i am a student, my name is %s'% self.name
class teacher(person):
def __init__(self,name,gender,course):
super(teacher,self).__init__(name,gender)
self.course = course
def who(self):
return 'i am a teacher, my name is %s'%self.name
p= person('ok','male')
s =student('BN','male',88)
t = teacher('alice','female','english')
print (p.who())
print(s.who())
print (t.who())
class skm(object):
def __init__(self,name):
self.name = name
def who(self):
return ' i can paluy'
class baskm(skm,student):
def __init__(self,name,course):
super(baskm,self).__init__(name)
self.course = course
def who(self):
return ' yes, i am student, i can play '+self.course
class fbskm(skm,student):
def __init__(self,name,gender,course):
super(baskm,self).__init__(name,gender,course)
self.course = course
def who(self):
return ' yes, i am student, i can play football!'
p1= baskm('bob','basketball')
print (p1.who())
查看全部 -
对字符串排序时,有时候忽略大小写排序更符合习惯。请利用sorted()高阶函数,实现忽略大小写排序的算法。
输入:['bob', 'about', 'Zoo', 'Credit']
输出:['about', 'bob', 'Credit', 'Zoo']
思路:将元素统一成小写或者大写,再排序
sorted接受key参数,用来指定排序的字段,key的值是一个函数,接受待排序列表的元素作为参数,并返回对应需要排序的字段。
sorted(需要排序的内容,key,reverse = True(降序)/False(升序))
用key的内容来排序,然后一一对应到需要排序的内容予以排序。
l5 = ['bob', 'about', 'Zoo', 'Credit']
def name1(item):
return item.upper()
print(sorted(l5,key = name1))
key的内容是l5经过函数后的内容['BOB', 'ABOUT', 'ZOO', 'CREDIT'],
对key进行排序,得到['ABOUT', 'BOB', 'CREDIT','ZOO'],
逐一对应给实际要排序的内容['bob', 'about', 'Zoo', 'Credit']进行排序。查看全部
举报