Предварительно: это плохое решение, но оно отвечает вашим требованиям с минимальными изменениями. По сути, вам нужно, чтобы экземпляры __str__
работали, поэтому это обманывает, используя синтаксис декоратора, чтобы изменить объявление класса в одноэлементную реализацию объявленного класса. Поскольку невозможно неявно ссылаться на внешние классы из вложенных классов , ссылка выполняется явно. А для повторного использования __str__
, file1
и file2
были превращены в @property
с тем, чтобы они могли использовать форму str
экземпляра details
для построения себя.
@object.__new__
class FileStructure(object): # Root directory
root = "root"
@object.__new__
class details(object): # details directory
root = "details"
@property
def file1(self):
return os.path.join(str(self), 'file1')
@property
def file2(self):
return os.path.join(str(self), 'file2')
def __str__(self):
return f"{os.path.join(FileStructure.root, self.root)}"
def __str__(self):
return f"{self.root}"
Опять же: хотя это и приводит к желаемому поведению, это все же является плохим решением. Я сильно подозреваю, что у вас здесь есть проблема XY , но это отвечает на вопрос в том виде, в котором он был задан.
ЧИСЛО (точность, масштаб)
, Если точность не определяется, значения хранилищ столбца, как дали. Если никакой масштаб не определяется, масштаб является нулем.
Намного больше информации в:
http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/datatype.htm#CNCPT1832
Oracle
числа хранилищ следующим образом: 1 byte
для питания, 1 byte
для первой цифры мантиссы (который является тем перед разделителем), остальные для других цифр.
digits
здесь Oracle
средства centesimal digits
(т.е. base 100
)
SQL> INSERT INTO t_numtest VALUES (LPAD('9', 125, '9'))
2 /
1 row inserted
SQL> INSERT INTO t_numtest VALUES (LPAD('7', 125, '7'))
2 /
1 row inserted
SQL> INSERT INTO t_numtest VALUES (LPAD('9', 126, '9'))
2 /
INSERT INTO t_numtest VALUES (LPAD('9', 126, '9'))
ORA-01426: numeric overflow
SQL> SELECT DUMP(num) FROM t_numtest;
DUMP(NUM)
--------------------------------------------------------------------------------
Typ=2 Len=2: 255,11
Typ=2 Len=21: 255,8,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,79
, Как мы видим, максимальное число здесь 7.(7) * 10^124
, и он имеет 19
сотенные цифры для точности, или 38
десятичные цифры.
Я полагаю, что точность по умолчанию равняется 38, масштаб по умолчанию является нулем. Однако фактический размер экземпляра этого столбца, является динамичным. Это возьмет в качестве большого количества пространства по мере необходимости для хранения значения, или макс. 21 байт.