Skip to content

Instantly share code, notes, and snippets.

@yuba
Last active June 15, 2017 02:42

Revisions

  1. yuba revised this gist Jun 15, 2017. No changes.
  2. yuba revised this gist Jun 15, 2017. 5 changed files with 5 additions and 5 deletions.
    2 changes: 1 addition & 1 deletion file0.txt
    Original file line number Diff line number Diff line change
    @@ -1,5 +1,5 @@
    class C:
    def __init__(n):
    def __init__(self, n):
    self.n = n

    def m(self, x, y):
    2 changes: 1 addition & 1 deletion file2.txt
    Original file line number Diff line number Diff line change
    @@ -1,5 +1,5 @@
    class C:
    def __init__(n):
    def __init__(self, n):
    self.n = n

    def m(self, x, y):
    2 changes: 1 addition & 1 deletion file4.txt
    Original file line number Diff line number Diff line change
    @@ -1,5 +1,5 @@
    class C:
    def __init__(n):
    def __init__(self, n):
    self.n = n

    def m(self, x, y):
    2 changes: 1 addition & 1 deletion file5.txt
    Original file line number Diff line number Diff line change
    @@ -1,5 +1,5 @@
    class C:
    def __init__(n):
    def __init__(self, n):
    self.n = n

    def m(self, x, y):
    2 changes: 1 addition & 1 deletion file7.txt
    Original file line number Diff line number Diff line change
    @@ -1,5 +1,5 @@
    class C:
    def __init__(n):
    def __init__(self, n):
    self.n = n

    def m(self, x, y):
  3. yuba revised this gist Jun 15, 2017. 1 changed file with 3 additions and 2 deletions.
    5 changes: 3 additions & 2 deletions file7.txt
    Original file line number Diff line number Diff line change
    @@ -10,10 +10,11 @@ def wrap_m(self):
    """
    与えられたオブジェクトのmというメソッドをいじって差し替えます
    """
    m_ = self.m

    # これが差し込むいたずら関数。クロージャでselfを知っている
    # これが差し込むいたずら関数。クロージャでself(というかここではself.m)を知っている
    def my_func(x, y): # selfを引数にとらない関数
    self.m('%s兆' % (x * 1000), '%s兆' % (y * 1000))
    m_('%s兆' % (x * 1000), '%s兆' % (y * 1000))

    self.m = my_func

  4. yuba revised this gist Jun 15, 2017. No changes.
  5. yuba created this gist Jun 15, 2017.
    13 changes: 13 additions & 0 deletions file0.txt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,13 @@
    class C:
    def __init__(n):
    self.n = n

    def m(self, x, y):
    print('self.n:%s, x:%s, y:%s' % (self.n, x, y))

    i = C(1)
    C.m # クラスメソッド参照
    i.m # インスタンスメソッド参照

    C.m(i, 5, 5) # クラスメソッド参照はselfを渡す必要あり
    i.m(5, 5) # インスタンスメソッド参照はselfを渡す必要なし
    2 changes: 2 additions & 0 deletions file1.txt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,2 @@
    self.n:1, x:5, y:5
    self.n:1, x:5, y:5
    13 changes: 13 additions & 0 deletions file2.txt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,13 @@
    class C:
    def __init__(n):
    self.n = n

    def m(self, x, y):
    print('self.n:%s, x:%s, y:%s' % (self.n, x, y))

    def my_func(self, x, y): # selfを第一引数にとる関数
    self.m('%s兆' % (x * 1000), '%s兆' % (y * 1000))

    C.my_m = my_func
    i = C(1)
    i.my_m(5, 5)
    1 change: 1 addition & 0 deletions file3.txt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1 @@
    self.n:1, x:5000兆, y:5000兆
    13 changes: 13 additions & 0 deletions file4.txt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,13 @@
    class C:
    def __init__(n):
    self.n = n

    def m(self, x, y):
    print('n:%s, x:%s, y:%s' % (self.n, x, y))

    def my_func(x, y): # selfを引数にとらない関数
    C('???').m('%s兆' % (x * 1000), '%s兆' % (y * 1000))

    i = C(1)
    i.my_m = my_func
    i.my_m(5, 5)
    16 changes: 16 additions & 0 deletions file5.txt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,16 @@
    class C:
    def __init__(n):
    self.n = n

    def m(self, x, y):
    print('n:%s, x:%s, y:%s' % (self.n, x, y))

    # ここですでにiというインスタンスが存在しているのがポイント
    i = C(1)

    self = i
    def my_func(x, y): # selfを引数にとらない関数
    self.m('%s兆' % (x * 1000), '%s兆' % (y * 1000))

    i.my_m = my_func
    i.my_m(5, 5)
    1 change: 1 addition & 0 deletions file6.txt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1 @@
    self.n:1, x:5000兆, y:5000兆
    25 changes: 25 additions & 0 deletions file7.txt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,25 @@
    class C:
    def __init__(n):
    self.n = n

    def m(self, x, y):
    print('n:%s, x:%s, y:%s' % (self.n, x, y))


    def wrap_m(self):
    """
    与えられたオブジェクトのmというメソッドをいじって差し替えます
    """

    # これが差し込むいたずら関数。クロージャでselfを知っている。
    def my_func(x, y): # selfを引数にとらない関数
    self.m('%s兆' % (x * 1000), '%s兆' % (y * 1000))

    self.m = my_func


    i1 = C(1)
    i2 = C(2)
    wrap_m(i1) # i1インスタンスのmメソッドをラップしちゃうぞ
    i1.m(5, 5)
    i2.m(5, 5)
    2 changes: 2 additions & 0 deletions file8.txt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,2 @@
    self.n:1, x:5000兆, y:5000兆
    self.n:2, x:5, y:5