Tôi hiểu rằng bạn không bao giờ nên sử dụng tên biến trong chương trình, nhưng tôi đang sử dụng hoàn toàn cho mục đích gỡ lỗi và muốn truyền tải tên của biến cho người dùng để đọc.
Tôi có một tệp như thế này:
class MyClass[object]:
def __init__[self]:
pass
def foo[msg=""]:
debug["Called from the %s instance."] #quazi-print function that only prints when a DEBUG variable is True.
print[msg]
m = MyClass[]
m.foo["Test"]
Tôi muốn truy xuất tên biến thể hiện
class Man[]:
def __init__[self]:
self.name = "Bob"
self.color = "White"
m = Man[]
print dir[m]
4 từ bên trong lớp. Mặc dù đây chỉ là một tệp ví dụ, tôi đang sử dụng nó để chuyển cho người dùng rằng một ổ cắm thô đã được tạo tại một thuộc tính nhất định trong một biến thể hiện và muốn hiển thị nó ở đâu [tức là class Man[]:
def __init__[self]:
self.name = "Bob"
self.color = "White"
m = Man[]
print dir[m]
5]Điều này có khả thi với Python không?
Martineau
Huy hiệu vàng 116K2525 gold badges160 silver badges285 bronze badges
Hỏi ngày 23 tháng 8 năm 2015 lúc 5:00Aug 23, 2015 at 5:00
4
Bạn có thể nhìn vào từ điển
class Man[]:
def __init__[self]:
self.name = "Bob"
self.color = "White"
m = Man[]
print dir[m]
6 của ví dụ và tìm vật phẩm có giá trị của nó.class Foo[object]:
def bar[self]:
return [k for k,v in globals[].items[] if v is self]
def bah[self]:
d = {v:k for k,v in globals[].items[]}
return d[self]
f = Foo[]
g = Foo[]
print f.bar[], g.bar[]
print f.bah[], g.bah[]
>>>
['f'] ['g']
f g
>>>
Đã trả lời ngày 23 tháng 8 năm 2015 lúc 5:23Aug 23, 2015 at 5:23
WWIIWWIIwwii
22.1k7 Huy hiệu vàng36 Huy hiệu bạc75 Huy hiệu Đồng7 gold badges36 silver badges75 bronze badges
3
Đây là một cách thực sự ngớ ngẩn để làm điều đó, nếu bạn không ngại chương trình thoát ra vào thời điểm đó: thêm dòng này vào foo []:
class Man[]:
def __init__[self]:
self.name = "Bob"
self.color = "White"
m = Man[]
print dir[m]
7Và khi bạn đến đó, bạn sẽ nhận được một dấu vết xếp chồng như thế này:
class Man[]:
def __init__[self]:
self.name = "Bob"
self.color = "White"
m = Man[]
print dir[m]
8... Điều đó cho bạn biết rằng tên của biến có tên là 'M' :]
.
Đã trả lời ngày 23 tháng 8 năm 2015 lúc 5:35Aug 23, 2015 at 5:35
FelixfelixFelix
4334 Huy hiệu bạc8 Huy hiệu Đồng4 silver badges8 bronze badges
3
Đúng. Để có được tất cả các thành viên của một lớp, bạn có thể sử dụng từ khóa tích hợp "Dir". Nó sẽ liệt kê tất cả các phương thức và biến trong lớp của bạn. Nếu bạn sử dụng chuyển đổi đặt tên phù hợp, bạn sẽ có thể biết tên nào là biến và phương pháp nào. Dir trả về một danh sách các chuỗi.
class Man[]:
def __init__[self]:
self.name = "Bob"
self.color = "White"
m = Man[]
print dir[m]
Điều này sẽ in ra:
['Doc', 'init', 'mô -đun', 'color', 'name']]]doc', 'init', 'module', 'color', 'name']
Có phải màu sắc và tên không phải là tên biến thể của lớp này?
Đã trả lời ngày 23 tháng 8 năm 2015 lúc 10:56Aug 23, 2015 at 10:56
Budbudbud
4856 Huy hiệu bạc22 Huy hiệu Đồng6 silver badges22 bronze badges
1
Có một số loại biến trong Python:
- Các biến thể hiện trong một lớp: Chúng được gọi là các trường hoặc thuộc tính của một đối tượng in a class: these are called fields or attributes of an object
- Các biến cục bộ: Các biến trong một phương thức hoặc khối mã: Variables in a method or block of code
- Tham số: Các biến trong khai báo phương thức: Variables in method declarations
- Biến lớp: Biến này được chia sẻ giữa tất cả các đối tượng của một lớp: This variable is shared between all objects of a class
Trong lập trình hướng đối tượng, khi chúng tôi thiết kế một lớp, chúng tôi sử dụng các biến thể hiện và biến lớp.
- Các biến thể hiện: Nếu giá trị của một biến thay đổi từ đối tượng này sang đối tượng khác, thì các biến đó được gọi là biến thể hiện.: If the value of a variable varies from object to object, then such variables are called instance variables.
- Biến lớp: Biến lớp là một biến được khai báo bên trong lớp, nhưng ngoài bất kỳ phương thức thể hiện nào hoặc phương thức
1.: A class variable is a variable that is declared inside of class, but outside of any instance method orclass Student: # constructor def __init__[self, name, age]: # Instance variable self.name = name self.age = age # create first object s1 = Student["Jessa", 20] # access instance variable print['Object 1'] print['Name:', s1.name] print['Age:', s1.age] # create second object s2= Student["Kelly", 10] # access instance variable print['Object 2'] print['Name:', s2.name] print['Age:', s2.age]
1 method.class Student: # constructor def __init__[self, name, age]: # Instance variable self.name = name self.age = age # create first object s1 = Student["Jessa", 20] # access instance variable print['Object 1'] print['Name:', s1.name] print['Age:', s1.age] # create second object s2= Student["Kelly", 10] # access instance variable print['Object 2'] print['Name:', s2.name] print['Age:', s2.age]
Sau khi đọc bài viết này, bạn sẽ học::
- Cách tạo và truy cập các biến thể hiện
- Sửa đổi các giá trị của các biến thể hiện
- Cách tự động thêm hoặc xóa các biến thể hiện
- Phạm vi của một biến thể
Một biến thể hiện trong Python là gì?
Nếu giá trị của một biến thay đổi từ đối tượng này sang đối tượng khác, thì các biến đó được gọi là biến thể hiện. Đối với mỗi đối tượng, một bản sao riêng biệt của biến thể hiện sẽ được tạo.. For every object, a separate copy of the instance variable will be created.
Các biến thể hiện không được chia sẻ bởi các đối tượng. Mỗi đối tượng có bản sao riêng của thuộc tính thể hiện. Điều này có nghĩa là đối với mỗi đối tượng của một lớp, giá trị biến thể hiện là khác nhau.
Khi chúng ta tạo các lớp trong Python, các phương thức thể hiện được sử dụng thường xuyên. Chúng ta cần tạo một đối tượng để thực thi khối mã hoặc hành động được xác định trong phương thức thể hiện.
Các biến thể hiện được sử dụng trong phương thức thể hiện. Chúng tôi sử dụng phương thức thể hiện để thực hiện một tập hợp các hành động trên dữ liệu/giá trị được cung cấp bởi biến thể hiện.
Chúng ta có thể truy cập biến thể hiện bằng toán tử đối tượng và dấu chấm [
class Student:
# constructor
def __init__[self, name, age]:
# Instance variable
self.name = name
self.age = age
# create first object
s1 = Student["Jessa", 20]
# access instance variable
print['Object 1']
print['Name:', s1.name]
print['Age:', s1.age]
# create second object
s2= Student["Kelly", 10]
# access instance variable
print['Object 2']
print['Name:', s2.name]
print['Age:', s2.age]
2].Trong Python, để làm việc với một biến thể hiện và phương thức, chúng tôi sử dụng & nbsp; ________ 33 & nbsp; từ khóa. Chúng tôi sử dụng & nbsp; ________ 33 & nbsp; từ khóa làm tham số đầu tiên cho một phương thức.
class Student:
# constructor
def __init__[self, name, age]:
# Instance variable
self.name = name
self.age = age
# create first object
s1 = Student["Jessa", 20]
# access instance variable
print['Object 1']
print['Name:', s1.name]
print['Age:', s1.age]
# create second object
s2= Student["Kelly", 10]
# access instance variable
print['Object 2']
print['Name:', s2.name]
print['Age:', s2.age]
3 đề cập đến đối tượng hiện tại.Các biến thể hiện được khai báo bên trong một phương thức sử dụng từ khóa
class Student:
# constructor
def __init__[self, name, age]:
# Instance variable
self.name = name
self.age = age
# create first object
s1 = Student["Jessa", 20]
# access instance variable
print['Object 1']
print['Name:', s1.name]
print['Age:', s1.age]
# create second object
s2= Student["Kelly", 10]
# access instance variable
print['Object 2']
print['Name:', s2.name]
print['Age:', s2.age]
3. Chúng tôi sử dụng một hàm tạo để xác định và khởi tạo các biến thể hiện. Hãy cùng xem ví dụ để khai báo một biến thể hiện trong Python.Example::
Trong ví dụ sau, chúng tôi đang tạo hai biến thể hiện
class Student:
# constructor
def __init__[self, name, age]:
# Instance variable
self.name = name
self.age = age
# create first object
s1 = Student["Jessa", 20]
# access instance variable
print['Object 1']
print['Name:', s1.name]
print['Age:', s1.age]
# create second object
s2= Student["Kelly", 10]
# access instance variable
print['Object 2']
print['Name:', s2.name]
print['Age:', s2.age]
7 và class Student:
# constructor
def __init__[self, name, age]:
# Instance variable
self.name = name
self.age = age
# create first object
s1 = Student["Jessa", 20]
# access instance variable
print['Object 1']
print['Name:', s1.name]
print['Age:', s1.age]
# create second object
s2= Student["Kelly", 10]
# access instance variable
print['Object 2']
print['Name:', s2.name]
print['Age:', s2.age]
8 trong lớp class Student:
# constructor
def __init__[self, name, age]:
# Instance variable
self.name = name
self.age = age
# create first object
s1 = Student["Jessa", 20]
# access instance variable
print['Object 1']
print['Name:', s1.name]
print['Age:', s1.age]
# create second object
s2= Student["Kelly", 10]
# access instance variable
print['Object 2']
print['Name:', s2.name]
print['Age:', s2.age]
9.class Student:
# constructor
def __init__[self, name, age]:
# Instance variable
self.name = name
self.age = age
# create first object
s1 = Student["Jessa", 20]
# access instance variable
print['Object 1']
print['Name:', s1.name]
print['Age:', s1.age]
# create second object
s2= Student["Kelly", 10]
# access instance variable
print['Object 2']
print['Name:', s2.name]
print['Age:', s2.age]
Đầu ra
Object 1 Name: Jessa Age: 20 Object 2 Name: Kelly Age: 10
Ghi chú::
- Khi chúng tôi tạo một đối tượng, chúng tôi đã chuyển các giá trị cho các biến thể hiện bằng cách sử dụng hàm tạo.
- Mỗi đối tượng chứa các giá trị khác nhau vì chúng tôi đã truyền các giá trị khác nhau cho một hàm tạo để khởi tạo đối tượng.
- Biến được khai báo bên ngoài
1 thuộc về lớp. Họ đã chia sẻ bởi tất cả các trường hợp.class Student: # constructor def __init__[self, name, age]: # Instance variable self.name = name self.age = age # create first object s1 = Student["Jessa", 20] # access instance variable print['Object 1'] print['Name:', s1.name] print['Age:', s1.age] # create second object s2= Student["Kelly", 10] # access instance variable print['Object 2'] print['Name:', s2.name] print['Age:', s2.age]
Sửa đổi các giá trị của các biến thể hiện
Chúng ta có thể sửa đổi giá trị của biến thể hiện và gán một giá trị mới cho nó bằng tham chiếu đối tượng.
Lưu ý: Khi bạn thay đổi các giá trị của biến thể hiện của một đối tượng, các thay đổi sẽ không được phản ánh trong các đối tượng còn lại vì mọi đối tượng đều duy trì một bản sao riêng của biến thể hiện.: When you change the instance variable’s values of one object, the changes will not be reflected in the remaining objects because every object maintains a separate copy of the instance variable.
Thí dụ
class Student:
# constructor
def __init__[self, name, age]:
# Instance variable
self.name = name
self.age = age
# create object
stud = Student["Jessa", 20]
print['Before']
print['Name:', stud.name, 'Age:', stud.age]
# modify instance variable
stud.name = 'Emma'
stud.age = 15
print['After']
print['Name:', stud.name, 'Age:', stud.age]
Đầu ra
Before Name: Jessa Age: 20 After Name: Emma Age: 15
Ghi chú:
Khi chúng tôi tạo một đối tượng, chúng tôi đã chuyển các giá trị cho các biến thể hiện bằng cách sử dụng hàm tạo.
- Mỗi đối tượng chứa các giá trị khác nhau vì chúng tôi đã truyền các giá trị khác nhau cho một hàm tạo để khởi tạo đối tượng.object reference [
3]class Student: # constructor def __init__[self, name, age]: # Instance variable self.name = name self.age = age # create first object s1 = Student["Jessa", 20] # access instance variable print['Object 1'] print['Name:', s1.name] print['Age:', s1.age] # create second object s2= Student["Kelly", 10] # access instance variable print['Object 2'] print['Name:', s2.name] print['Age:', s2.age]
- Biến được khai báo bên ngoài
1 thuộc về lớp. Họ đã chia sẻ bởi tất cả các trường hợp.class Student: # constructor def __init__[self, name, age]: # Instance variable self.name = name self.age = age # create first object s1 = Student["Jessa", 20] # access instance variable print['Object 1'] print['Name:', s1.name] print['Age:', s1.age] # create second object s2= Student["Kelly", 10] # access instance variable print['Object 2'] print['Name:', s2.name] print['Age:', s2.age]
Sửa đổi các giá trị của các biến thể hiện: Access instance variable in the instance method
class Student:
# constructor
def __init__[self, name, age]:
# Instance variable
self.name = name
self.age = age
# instance method access instance variable
def show[self]:
print['Name:', stud.name, 'Age:', stud.age]
# create object
stud = Student["Jessa", 20]
# call instance method
stud.show[]
Đầu ra
Name: Jessa Age: 20
Khi chúng tôi tạo một đối tượng, chúng tôi đã chuyển các giá trị cho các biến thể hiện bằng cách sử dụng hàm tạo.: Access instance variable using
Object 1 Name: Jessa Age: 20 Object 2 Name: Kelly Age: 102
getattr[Object, 'instance_variable']
Mỗi đối tượng chứa các giá trị khác nhau vì chúng tôi đã truyền các giá trị khác nhau cho một hàm tạo để khởi tạo đối tượng.
class Foo[object]:
def bar[self]:
return [k for k,v in globals[].items[] if v is self]
def bah[self]:
d = {v:k for k,v in globals[].items[]}
return d[self]
f = Foo[]
g = Foo[]
print f.bar[], g.bar[]
print f.bah[], g.bah[]
>>>
['f'] ['g']
f g
>>>
0Đầu ra
class Foo[object]:
def bar[self]:
return [k for k,v in globals[].items[] if v is self]
def bah[self]:
d = {v:k for k,v in globals[].items[]}
return d[self]
f = Foo[]
g = Foo[]
print f.bar[], g.bar[]
print f.bah[], g.bah[]
>>>
['f'] ['g']
f g
>>>
1Ghi chú:
- Khi chúng tôi tạo một đối tượng, chúng tôi đã chuyển các giá trị cho các biến thể hiện bằng cách sử dụng hàm tạo.
- Các từ trong một tên biến thể được phân tách bằng một dấu gạch dưới. Ví dụ:
Object 1 Name: Jessa Age: 20 Object 2 Name: Kelly Age: 10
6 - Các biến trường hợp không công khai nên bắt đầu bằng một dấu gạch dưới
- Nếu một tên ví dụ cần được xáo trộn, hai dấu gạch dưới có thể bắt đầu tên của nó
Tự động thêm biến thể hiện vào một đối tượng
Chúng ta có thể thêm các biến thể hiện từ bên ngoài lớp vào một đối tượng cụ thể. Sử dụng cú pháp sau để thêm biến thể hiện mới vào đối tượng.
class Foo[object]:
def bar[self]:
return [k for k,v in globals[].items[] if v is self]
def bah[self]:
d = {v:k for k,v in globals[].items[]}
return d[self]
f = Foo[]
g = Foo[]
print f.bar[], g.bar[]
print f.bah[], g.bah[]
>>>
['f'] ['g']
f g
>>>
2Example::
class Foo[object]:
def bar[self]:
return [k for k,v in globals[].items[] if v is self]
def bah[self]:
d = {v:k for k,v in globals[].items[]}
return d[self]
f = Foo[]
g = Foo[]
print f.bar[], g.bar[]
print f.bah[], g.bah[]
>>>
['f'] ['g']
f g
>>>
3Đầu ra
class Foo[object]:
def bar[self]:
return [k for k,v in globals[].items[] if v is self]
def bah[self]:
d = {v:k for k,v in globals[].items[]}
return d[self]
f = Foo[]
g = Foo[]
print f.bar[], g.bar[]
print f.bah[], g.bah[]
>>>
['f'] ['g']
f g
>>>
4Ghi chú::
- Chúng ta không thể thêm một biến thể hiện vào một lớp từ bên ngoài vì các biến thể hiện thuộc về các đối tượng.
- Thêm một biến thể hiện vào một đối tượng sẽ không được phản ánh các đối tượng còn lại vì mọi đối tượng đều có một bản sao riêng của biến thể hiện. because every object has a separate copy of the instance variable.
Xóa tự động biến biến thể hiện
Trong Python, chúng tôi sử dụng câu lệnh
Object 1 Name: Jessa Age: 20 Object 2 Name: Kelly Age: 107 và
Object 1 Name: Jessa Age: 20 Object 2 Name: Kelly Age: 108 để xóa thuộc tính của một đối tượng. Cả hai đều làm điều tương tự.
- Tuyên bố
Object 1 Name: Jessa Age: 20 Object 2 Name: Kelly Age: 10
7: Từ khóaObject 1 Name: Jessa Age: 20 Object 2 Name: Kelly Age: 10
7 được sử dụng để xóa các đối tượng. Trong Python, mọi thứ đều là một đối tượng, vì vậy từ khóaObject 1 Name: Jessa Age: 20 Object 2 Name: Kelly Age: 10
7 cũng có thể được sử dụng để xóa các biến, danh sách hoặc các phần của danh sách, v.v. - Hàm
Object 1 Name: Jessa Age: 20 Object 2 Name: Kelly Age: 10
8: Được sử dụng để xóa một biến thể hiện một cách linh hoạt.
Lưu ý: Khi chúng tôi cố gắng truy cập thuộc tính đã xóa, nó sẽ gây ra lỗi thuộc tính.: When we try to access the deleted attribute, it raises an attribute error.
Ví dụ 1: Sử dụng câu lệnh Object 1
Name: Jessa
Age: 20
Object 2
Name: Kelly
Age: 10
7: Using the
Object 1 Name: Jessa Age: 20 Object 2 Name: Kelly Age: 107 statement
class Foo[object]:
def bar[self]:
return [k for k,v in globals[].items[] if v is self]
def bah[self]:
d = {v:k for k,v in globals[].items[]}
return d[self]
f = Foo[]
g = Foo[]
print f.bar[], g.bar[]
print f.bah[], g.bah[]
>>>
['f'] ['g']
f g
>>>
5Đầu ra
class Foo[object]:
def bar[self]:
return [k for k,v in globals[].items[] if v is self]
def bah[self]:
d = {v:k for k,v in globals[].items[]}
return d[self]
f = Foo[]
g = Foo[]
print f.bar[], g.bar[]
print f.bah[], g.bah[]
>>>
['f'] ['g']
f g
>>>
6Ghi chú:
Chúng ta không thể thêm một biến thể hiện vào một lớp từ bên ngoài vì các biến thể hiện thuộc về các đối tượng.
class Foo[object]:
def bar[self]:
return [k for k,v in globals[].items[] if v is self]
def bah[self]:
d = {v:k for k,v in globals[].items[]}
return d[self]
f = Foo[]
g = Foo[]
print f.bar[], g.bar[]
print f.bah[], g.bah[]
>>>
['f'] ['g']
f g
>>>
7- Thêm một biến thể hiện vào một đối tượng sẽ không được phản ánh các đối tượng còn lại vì mọi đối tượng đều có một bản sao riêng của biến thể hiện.
- Xóa tự động biến biến thể hiện
Trong Python, chúng tôi sử dụng câu lệnh Object 1
Name: Jessa
Age: 20
Object 2
Name: Kelly
Age: 10
7 và Object 1
Name: Jessa
Age: 20
Object 2
Name: Kelly
Age: 10
8 để xóa thuộc tính của một đối tượng. Cả hai đều làm điều tương tự.
class Foo[object]:
def bar[self]:
return [k for k,v in globals[].items[] if v is self]
def bah[self]:
d = {v:k for k,v in globals[].items[]}
return d[self]
f = Foo[]
g = Foo[]
print f.bar[], g.bar[]
print f.bah[], g.bah[]
>>>
['f'] ['g']
f g
>>>
8Đầu ra
class Foo[object]:
def bar[self]:
return [k for k,v in globals[].items[] if v is self]
def bah[self]:
d = {v:k for k,v in globals[].items[]}
return d[self]
f = Foo[]
g = Foo[]
print f.bar[], g.bar[]
print f.bah[], g.bah[]
>>>
['f'] ['g']
f g
>>>
9Ghi chú:
Chúng ta không thể thêm một biến thể hiện vào một lớp từ bên ngoài vì các biến thể hiện thuộc về các đối tượng.
Thêm một biến thể hiện vào một đối tượng sẽ không được phản ánh các đối tượng còn lại vì mọi đối tượng đều có một bản sao riêng của biến thể hiện.
Xóa tự động biến biến thể hiện
class Man[]:
def __init__[self]:
self.name = "Bob"
self.color = "White"
m = Man[]
print dir[m]
0Đầu ra
class Man[]:
def __init__[self]:
self.name = "Bob"
self.color = "White"
m = Man[]
print dir[m]
1Ghi chú:
Chúng ta không thể thêm một biến thể hiện vào một lớp từ bên ngoài vì các biến thể hiện thuộc về các đối tượng.
Thêm một biến thể hiện vào một đối tượng sẽ không được phản ánh các đối tượng còn lại vì mọi đối tượng đều có một bản sao riêng của biến thể hiện.
Xóa tự động biến biến thể hiện:
class Man[]:
def __init__[self]:
self.name = "Bob"
self.color = "White"
m = Man[]
print dir[m]
2Output::
class Man[]:
def __init__[self]:
self.name = "Bob"
self.color = "White"
m = Man[]
print dir[m]
3