Category Archives: Python

クラス、インスタンス、継承

class Animal:
    // クラスメソッド
    def test():
        print("test!")

    // 以下インスタンスメソッド
    def __init__(self, name):
        self.name = name

    def sayName(self):
        print(self.name)

class Uma(Animal):
    def cry(self):
        print("hi----n!!")

// クラスメソッド実行
Animal.test()

// インスタンス生成及び、インスタンスメソッド実行
animal = Animal("yohei")
animal.sayName()

// 継承
uma = Uma("isao")

// 継承元のインスタンスメソッド実行
uma.sayName()

// 追加したインスタンスメソッド
uma.cry()

オーバーライド

以下でメソッドをオーバーライドできる

class Uma(Animal):
    def sayName(self):
        print("%s!" % self.name)

anaconda pythonバージョン切り替え

切り替え作業

// 現在のバージョン確認
python
Python 3.4.5 |Anaconda 2.3.0 (x86_64)| (default, Jul 2 2016, 17:47:57)

// 仮想環境作成
conda create -n py27 python=2.7

// 作成した仮想環境確認
conda env list

// 環境に接続 上記で確認したanacondaのバージョンを指定
source $PYENV_ROOT/versions/anaconda3-2.3.0/bin/activate py27

参考

http://no-title.com/programming/anaconda2

django モデル メソッド

モデル定義

from django.db import models
from django.utils import timezone

class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')
    def __str__(self):
        return self.question_text
    def was_published_recently(self):
        return self.pub_date >= timezone.now() - datetime.timedelta(days=1)

class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE) // リレーション定義
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)
    def __str__(self):
        return self.choice_text

python shell

// id=2のレコードを取得
question = Question.objects.get(pk=2)

// questionのプロパティ参照
question.id
question.question_text

// リレーション先取得
choices = question.choice_set.all()

// カウント
choices.count()

// 配列から取得
choices[0].id
choices[0].votes

// リレーション元を取得
choices[0].question

python debugger

ライブラリインストール

conda install -c conda-forge ipdb=0.10.1

設定

以下のように止めたいところにセット

def detail(request, question_id):
    # return HttpResponse("You're looking at question %s." % question_id)

    // 止める
    import ipdb; ipdb.set_trace()

django

参考資料

https://docs.djangoproject.com/ja/1.10/
https://github.com/Chive/django-poll-app

シンプルなもの

// プロジェクト作成
django-admin.py startproject mysite

// mysiteフォルダに移動
cd mysite

// アプリ作成
python manage.py startapp myapp

// サーバー起動 mysiteフォルダで実行
python manage.py runserver 0.0.0.0:8000

テキスト表示

mysite/urls.py

from django.conf.urls import include, url
from django.contrib import admin

urlpatterns = [
    url(r'^myapp/', include('myapp.urls')),
    url(r'^admin/', admin.site.urls),
]

myapp/views.py

from django.http import HttpResponse
def index(request):
    return HttpResponse('Hello')

myapp/urls.py

from django.conf.urls import url

from . import views

urlpatterns = [
    url(r'^$', views.index, name='index'),
]

モデル作成

ライブラリインストール

install -c https://conda.anaconda.org/anaconda mysql-connector-python

ライブラリ読み込み

manage.py

// 以下を追記
import pymysql
pymysql.install_as_MySQLdb()

db設定

mysite/settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'mysite',
        'USER':'root',
        'HOST':'',
    }
}

db作成

事前にmysqlで作成しておく

モデルファイル作成

myapp/models.py

from django.db import models

# Create your models here.
class User(models.Model):
    name = models.CharField(max_length=200)

マイグレート

// マイグレートファイルが作成される(myapp/migrations)
python manage.py makemigrations

// マイグレート実行。テーブルが作成される。
python manage.py migrate

ターミナルからレコード作成

// ターミナル起動
python manage.py shell

// モデル読み込み
from myapp.models import User

// レコード作成
user.objects.create(name="hello")

// レコード取得
User.objects.all()[0].name

カラム名変更

モデルクラスを修正して、再度、マイグレーションファイルを作成してマイグレートするだけ
https://docs.djangoproject.com/en/1.10/ref/migration-operations/#renamefield

Python 環境構築

ライブラリインストール

// pyenv インストール
brew install pyenv

// パスを通す
echo 'export PYENV_ROOT="${HOME}/.pyenv"' >> ~/.bash_profile
echo 'export PATH="${PYENV_ROOT}/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
source ~/.bash_profile

// anacondaインストール
pyenv install anaconda3-2.5.0

// グローバルに設定
pyenv global anaconda3-2.5.0

// バージョン確認
$ python --version
Python 3.5.2 :: Anaconda 2.5.0 (x86_64)

エディタインストール

https://www.jetbrains.com/pycharm/download/

参考

http://qiita.com/oct_itmt/items/2d066801a7464a676994
http://qiita.com/tnoho/items/bcddbe1c499a3f23f8bb