-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathatrib_classe_inst.py
46 lines (36 loc) · 1.01 KB
/
atrib_classe_inst.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# coding: utf-8
"""
Demostração de atributos de classe x de instância
>>> o = X(2, 'nonon')
>>> o.a, o.b, o.c
(77, 2, 'nonon')
O método c não é acessado via ``o.c``, porque todos os métodos são na verdade
atributos da classe, e ``o`` é uma instância. Ao acessar atributos via uma
instância, os atributos da própria instância sempre têm prioridade.
>>> o.c = 'bla'
>>> o.c
'bla'
>>> o.__init__ = 'perigo'
>>> o.__init__
'perigo'
Mas a classe continua funcionando para criar novas instâncias:
>>> oo = X(9, 'xyz')
>>> oo.a, oo.b, oo.c
(77, 9, 'xyz')
Em caso de necessidade (isso é raro) sempre é possível acessar os
métodos direto na classe, passando uma instância como argumento
explícito:
>>> X.c(o)
'BLA'
>>> X.__init__(o, 42, 'ufa')
>>> o.a, o.b, o.c
(77, 42, 'ufa')
"""
class X(object):
a = 77
b = 0
def __init__(self, b, c):
self.b = b
self.c = c
def c(self):
return self.c.upper()