我希望一个特定的函数可以作为类方法调用,并且当它在一个实例上调用时表现不同.
例如,如果我有一个class Thing,我想Thing.get_other_thing()工作,但也thing = Thing(); thing.get_other_thing()表现不同.
我认为覆盖get_other_thing初始化方法应该有效(见下文),但这看起来有点hacky.有没有更好的办法?
class Thing:
def __init__(self):
self.get_other_thing = self._get_other_thing_inst()
@classmethod
def get_other_thing(cls):
# do something...
def _get_other_thing_inst(self):
# do something else
Run Code Online (Sandbox Code Playgroud) 我有以下用于下载 YouTube 视频的代码。我会自动检测它是播放列表还是单个视频。然而突然出现上述错误。可能是什么问题?
import pafy
from log import *
import tkinter.filedialog
import pytube
url = input("Enter url :")
directory = tkinter.filedialog.askdirectory()
def single_url(url,directory):
print("==================================================================================================================")
video = pafy.new(url)
print(url)
print(video.title)
#logs(video.title,url)
file_object = open(directory+"/links.log", "a")
file_object.write(video.title +' '+ url + '\n')
file_object.close()
print('Rating :',video.rating,', Duration :',video.duration,', Likes :',video.likes, ', Dislikes : ', video.dislikes)
#print(video.description)
best = video.getbest()
print(best.resolution, best.extension)
best.download(quiet=False, filepath=directory+'/'+video.title+"." + best.extension)
print("saved at :", directory, " directory")
print("==================================================================================================================")
def playlist_func(url,directory):
try:
playlist = pytube.Playlist(url)
file_object = open(directory+"/links.log", "a")
file_object.write('Playlist …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个矩阵,然后使用 python 打印它,并具有以下预期输出:
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
Run Code Online (Sandbox Code Playgroud)
代码如下:
matrix=[[]]
matrix = [[0 for x in range(4)] for x in range(4)]
print matrix
Run Code Online (Sandbox Code Playgroud)
但输出如下:
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
Run Code Online (Sandbox Code Playgroud)
请告诉我为什么会得到这种类型的输出并帮助我找到正确的输出
这让我非常困惑.我用pip安装了pyad,一切似乎都很好:
C:\WINDOWS\system32>pip install pyad
Collecting pyad
Using cached pyad-0.5.16.tar.gz
Requirement already satisfied (use --upgrade to upgrade): setuptools in c:\python35\lib\site-packages (from pyad)
Requirement already satisfied (use --upgrade to upgrade): pywin32 in c:\python35\lib\site-packages (from pyad)
Installing collected packages: pyad
Running setup.py install for pyad ... done
Successfully installed pyad-0.5.16
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用它时,我收到一个错误,抱怨没有找到adbase:
C:\WINDOWS\system32>python
Python 3.5.1 (v3.5.1:37a07cee5969, Dec 6 2015, 01:54:25) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from pyad import aduser
Traceback (most recent …Run Code Online (Sandbox Code Playgroud) 根据Python的文档,reversed()使用__getitem__和__len__if __reversed__未实现.
我遇到了一个奇怪的行为,但未能解释它:
>>> class A(dict):
... pass
...
>>> reversed(A())
Traceback (most recent call last):
...
TypeError: 'A' object is not reversible
>>> class B(dict):
... def __getitem__(self, key):
... return super().__getitem__(key)
... def __len__(self):
... return super().__len__()
...
>>> reversed(B())
Traceback (most recent call last):
...
TypeError: 'B' object is not reversible
>>> class C:
... def __getitem__(self, key):
... return "item"
... def __len__(self):
... return 1
... …Run Code Online (Sandbox Code Playgroud) 我希望使用套接字创建一个绑定到 IPv4 和 IPv6 地址的 TCP 服务器。
有没有办法在不创建 2 个套接字的情况下做到这一点?
据我所知,cpython 实现为某些相同的值保留相同的对象以节省内存。例如,当我创建 2 个带有 value 的字符串时hello,cpython 不会创建 2 个不同的字符串PyObject:
>>> s1 = 'hello'
>>> s2 = 'hello'
>>> s1 is s2
True
Run Code Online (Sandbox Code Playgroud)
我听说过名字string interning。当我尝试用其他 python 类型检查它时,我发现几乎所有可哈希(不可变)类型都是相同的:
>>> int() is int()
True
>>> str() is str()
True
>>> frozenset() is frozenset()
True
>>> bool() is bool()
True
Run Code Online (Sandbox Code Playgroud)
几乎所有可变类型都是相反的(cpythonPyObject甚至为相同的值创建一个新的类型):
>>> list() is list()
False
>>> set() is set()
False
>>> dict() is dict()
False
Run Code Online (Sandbox Code Playgroud)
我认为这是因为我们可以对PyObject不可变对象使用相同的方法而不会出现任何问题。
当我看到该float类型的行为与其他不可变类型不同时,我的问题就出现了:
>>> float() is float() …Run Code Online (Sandbox Code Playgroud) 我在尝试使用 pyad 访问活动目录用户属性时遇到问题。这是我的代码:
user = pyad.aduser.ADUser.from_cn("tuser")
print user.get_attribute(lastLogonTimestamp")
Run Code Online (Sandbox Code Playgroud)
这些是打印的属性:
C:\Users\tuser\Desktop\docb0t>python docb0t.py
[<COMObject GetEx>]
Run Code Online (Sandbox Code Playgroud)
我不知道如何从该对象中检索值。我该怎么做?
我os.walk用来遍历一个文件夹.那里有一些非ascii命名文件.对于这些文件,os.walk给了我类似的东西???.txt.我不能open用这样的文件名调用.它抱怨[Errno 22] invalid mode ('rb') or filename.我应该如何解决这个问题?
我使用的是Windows 7,python 2.7.11.我的系统区域设置是en-us.
我想打印一个阵列,如:
Table = [(0,0,0),(0,0,1),(0,1,0)]。
因此,我想将此数组打印为表格,例如:
0 0 0
0 0 1
0 1 0
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
我尝试了一个简单的方法,print Table但这会像这样打印数组:
[(0,0,0),(0,0,1),(0,1,0)]
Run Code Online (Sandbox Code Playgroud)