1 char s[100];
2 s = "hello";
В примере Вы, если, s на самом деле инициализируется в строке 1, не строке 2. Даже при том, что Вы не присваивали ему значение явно в этой точке, компилятор сделал. В строке 2, Вы выполняете операцию присвоения, и Вы не можете присвоить один массив символов к другому массиву символов как это. Необходимо будет использовать strcpy () или некоторый цикл для присвоения каждого элемента массива.
Вот несколько простых указателей на удобство использования в вашей типографии . Эти вещи в основном решают проблемы удобочитаемости и доступности.
ДОЛЖНЫ: которые (должны) быть единственным способом изменить его свойства (внутренние переменные).
Обычно функции назывались trim_string (string)
, тогда как с классом string
вы можете выполнить string.trim ()
. Разница заметна в основном при создании больших сложных модулей, когда вам нужно сделать все возможное, чтобы минимизировать связь между отдельными компонентами.
Существуют и другие концепции, которые охватывают ООП, например наследование, но действительно важно знать, что что ООП заставляет вас думать об объектах , которые имеют операции и передачу сообщений (методы / глаголы), вы можете считать свой класс независимым от остальных. Когда происходит глобальное изменение, вы меняете Animal
, когда это узкое изменение, вам просто нужно взглянуть на определение класса.
Для простого, последовательного и, возможно, одноразового кода можно используйте структурное программирование.
Вам не требуется для использования классов в Python - это не заставляет вас выполнять ООП . Если вам удобнее работать с функциональным стилем, ничего страшного. Я использую классы, когда хочу смоделировать некоторую абстракцию, которая имеет вариации, и я хочу моделировать эти вариации с помощью классов. Как подразумевает слово "класс", они полезны в основном тогда, когда вещи, с которыми вы работаете, естественным образом относятся к разным классам. Когда я просто манипулирую большими наборами данных, я не обнаружил общей необходимости следовать парадигме ООП только ради этого.
ООП хорошо подходит для сложных программ. Он отлично подходит для фиксации состояния и поведения концепций реального мира и организации взаимодействия между ними. Хороший объектно-ориентированный код легко читать / понимать, защищает целостность ваших данных и максимально увеличивает повторное использование кода. Я бы сказал, что повторное использование кода - одно из больших преимуществ хранения часто используемых вычислений в классе.
«но функции не содержатся в классе».
Они могли бы быть.
class Linear( object ):
a= 2.
b= 3.
def calculate( self, somePoint ):
somePoint['line']= b + somePoint['x']*a
class Exponential( object ):
a = 1.05
b = 3.2
def calculate( self, somePoint ):
somePoint['exp']= b * somePoint['x']**a
class Mapping( object ):
def __init__( self ):
self.funcs = ( Linear(), Exponential() )
def apply( self, someData ):
for row in someData:
for f in self.funcs:
f.calculate( row )
Теперь ваши вычисления заключены в классы. Вы можете использовать шаблоны проектирования, такие как Delegation , Composition и Command , чтобы упростить ваши скрипты.
Объектно-ориентированное программирование - не решение всех проблем программирования.
В Python функции являются объектами. Вы можете смешивать столько объектов и функций, сколько хотите.
Модули с функциями уже являются объектами со свойствами.
Если вы обнаружите, что передаете много одинаковых переменных вокруг - state - объект наверное лучше подходит. Если у вас много классов с методами класса или методы, которые не очень часто используют self
, тогда функции, вероятно, лучше.