Aşağıdaki kod ilk çalıştığı şey, ama with_suffix
yeniden tanımlama yoktu çünkü some_path.with_suffix('.jpg')
açıkçası, bir pathlib.PosixPath
nesne (Linux çıkıyorum) yerine PosixPath
benim sürümünü döndürür. pathlib
'dan her şeyi kopyalamak zorunda mıyım yoksa daha iyi bir yolu var mı? some_path
Path
sürümü örneğidirPython 3.4+: genişletme pathlib.Path
import os
import pathlib
from shutil import rmtree
class Path(pathlib.Path):
def __new__(cls, *args, **kwargs):
if cls is Path:
cls = WindowsPath if os.name == 'nt' else PosixPath
self = cls._from_parts(args, init=False)
if not self._flavour.is_supported:
raise NotImplementedError("cannot instantiate %r on your system"
% (cls.__name__,))
self._init()
return self
def with_stem(self, stem):
"""
Return a new path with the stem changed.
The stem is the final path component, minus its last suffix.
"""
if not self.name:
raise ValueError("%r has an empty name" % (self,))
return self._from_parsed_parts(self._drv, self._root,
self._parts[:-1] + [stem + self.suffix])
def rmtree(self, ignore_errors=False, onerror=None):
"""
Delete the entire directory even if it contains directories/files.
"""
rmtree(str(self), ignore_errors, onerror)
class PosixPath(Path, pathlib.PurePosixPath):
__slots__ =()
class WindowsPath(Path, pathlib.PureWindowsPath):
__slots__ =()
Belki dönüştüren bir işlev dekoratör sahip olduğu 'pathlib.Path'' Path' sınıfınıza ulaşır, daha sonra '__metaclass__' veya sınıf dekoratörlerini kullanarak bu dekoratörü tüm sınıf yöntemlerine uygulayabilirsiniz. – kalhartt
Bunu neden yapmak zorunda olduğunuzu anlamıyorum. 'with_suffix()' 'object_ new __ (cls)' olarak adlandırılan '_from_parsed_parts()' işlevlerini çağırır. cls, sizin özel sınıfınızdır, pathlib'den bir şey değil, bu yüzden burada bir 'pathlib' sınıfı ile nasıl sonuçlanabileceğinizi göremiyorum. Herhangi bir fikri olan var mı? Belki de OP'nin farkı görmek için __repr __() 'yi geçersiz kılması gerekiyor? – Kevin