Как даровать строковый мыс моему классу?

Проблема, я полагаю, заключается в использовании индекса карты в качестве ключа. Вы можете иметь свойство индекса в каждом элементе.

class App extends Component {
  constructor(props) {
    super(props);
    this.state = {
      datas: [
        { index:0, name: "test", value: "test" },
        { index:1, name: "test 1", value: "test 1" },
        { index:2,  name: "test 2", value: "test 2" }
      ],
      counter: 3
    };
  }

  delete = index => {
    let datas = this.state.datas.filter((e, i) => i !== index);
    this.setState({ datas: datas });
  };

  addnew = () => {
    let datas = this.state.datas;
    datas.push({ index: this.state.counter, name: , value:  });
    this.setState({ datas: datas, counter: this.state.counter + 1 });
  };

  render() {
    return (
      
{this.state.datas.map((data, index) => ( ))}
Name Value Action
{data.name} {data.value} {" "}
); } }

Изменить на CodeSandbox: https://codesandbox.io/embed/p57now4pjx?fontsize=14

6
задан Tobias 4 May 2009 в 16:11
поделиться

4 ответа

str может быть унаследован, если вы не используете очень старую версию Python, например:

>>> class A(str):
...    def __new__(cls, color, *args, **kwargs):
...        newobj = str.__new__(cls, *args, **kwargs)
...        newobj.color = color
...        return newobj
>>> a = A("#fff", "horse")
>>> a.color
'#fff'
>>> a
'horse'
>>> a.startswith("h")
True
6
ответ дан 10 December 2019 в 02:53
поделиться

Вам нужны все методы строки, поэтому расширьте строку и добавьте дополнительные сведения. Так что, если строка неизменна? Просто сделайте свой класс неизменным тоже. Затем вы все равно создаете новые объекты, чтобы случайно не ошибиться, думая, что это изменяемый объект.

Или, если у Python есть такой объект, расширьте изменяемый вариант строки. Я недостаточно знаком с Python, чтобы знать, существует ли такая структура.

0
ответ дан 10 December 2019 в 02:53
поделиться

Возможно, лучше использовать пользовательский класс, который содержит строку. Вы действительно должны передать все строковые методы до базовой строки? Почему бы не раскрыть строку через свойство и позволить потребителям класса делать с ней все, что они пожелают?

1
ответ дан 10 December 2019 в 02:53
поделиться
import UserString
class mystr(UserString.MutableString):
   ...

Обычно лучше использовать неизменяемые строки и их подклассы, но если вам нужна изменяемая строка, это самый простой способ получить ее.

2
ответ дан 10 December 2019 в 02:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: