class Pessoa:
def setidade(self,x):
if x >0 :
self.idade=x
def getidade(self):
return self.idade
So da para definir os metodos. (Normalmente) não há a definição de atributos/campos/variávies
Há sempre o parâmetro self
para os metodos, que indicam o objeto sobre o qual o método esta sendo executado
Atribuos/campos/variaveis dos objetos são sempre visiveis e modificaveis!! Nao ha atributos privados
x=Pessoa()
x.setidade(12)
x.getidade()
x.idade
x.idade=99
x.nome="jose"
Usualmente indica-se um atributo privado usando dois underscores (regra para programadores não para o ambiente de execução) __nome__
Pessoa()
cria um objeto, se existe isso chama o construtor __init__
class Pessoa:
def __init__(self,idade,nome):
if idade>0:
self.idade=idade
self.nome=nome
x = Pessoa(-45,"jose")
class Aluno(Pessoa):
pass
a=Aluno()
isinstance(a,Aluno)
isinstance(a,Pessoa)
class Pessoa:
npernas=2
x=Pessoa()
y=Pessoa()
x.npernas
x.npernas=9
x.npernas
y.npernas
Pessoa.npernas
Pessoa.npernas=10
y.npernas
x.npernas
Usualmente nao se cria um monte de objetos.
Usualmente objetos sao uma interface para as bibliotecas
https://docs.python.org/3/reference/datamodel.html
operator overloading; definir diferentes acoes para o mesmo operador
x[i]
acesso em listas e dicionários
x[i]
na verdade chama o metodo x.__getitem__(i)
__str__
é chamado pelo print para imprimir um dado (converte p/ string)__init__
e __new__
sao chamados pelo construtor__eq__(x,y)
é chamado na comparacao x == yx.__getattr__("a")
chamado em x.a
__setattr__
para setar um atributo__call__(self[, args...])
chamado em x(a,b,c)
__len__(self)
para len__iter__(self)
e __next__(self)
veremos em interators__add__
para +
Pacotes pre definidos
import math
math.sin(3.14)
from math import sin,cos
sin(3.14)
import math as ma
ma.sin(3.14)
Veja o link para o standard library
Pacotes externos - requer instalacao pip
ou conda
A interface para os modulos é normalmente através de objetos.
Exemplo de https://docs.python.org/3/howto/urllib2.html#urllib-howto
import urllib.request
with urllib.request.urlopen('http://www.python.org/') as f:
print(f.read(300))
urllib.request.urlopen('http://www.python.org/')
retorna um objeto do tipo bytes que tem o método read
.
sklearn para aprendizado de maquina: https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html
classificador = SVC(parametro1=...) # seta os parametros
classificador.fit(dados) # treina
resultado = classificador.predict(dados_novos) # usa nos dados novos
Mas nem sempre - todas as funções em math
e algumas no scipy
são funções e não objetos/métodos
lambda
mas a funcao so pode ter 1 linha
lambda x : x > 0
map(lambda x : x+3, [4,5,6,7])
filter(lambda x: x>0, [4,-5,6,-7])
mas use o list comprehension em vez de map+filter
foldl:
from functools import reduce
reduce(combinacao, lista, inicial)
key: uma funçao que é aplicada em cada elemento e cujo valor é usa
max( iteratable, key=func)
list.sort(key=func)
sorted( iteratable, key=func)
max(lista,key=func)
=
max([(func(x),x) for x in lista][1]
Soluções p/ o exercicio passado - retorna o item mais frequente
usando dicionarios - linear
max(set(l),key=l.count) - entre linear e quadratico
max([(l.count(x),x) for x in l])[1] - quadratico
x[i]
ou x['chave']
ou x.chave
podem ser convertidos em funções para o argumento x
itemgetter
- f = itemgetter(2)
entao f(x)
retorna x[2]
f = itemgetter(2,3,5)
entao f(x)
retorna (x[2],x[3],x[5])
attrgetter
- f = attrgetter("chave")
entao f(x)
retorna x.chave