- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Python面向对象之成员相关知识总结由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
class
Person(
object
):
country
=
"中国"
def
__init__(
self
, name, age):
self
.name
=
name
self
.age
=
age
def
show(
self
):
# message = "{}-{}-{}".format(Person.country, self.name, self.age)
message
=
"{}-{}-{}"
.
format
(
self
.country,
self
.name,
self
.age)
print
(message)
print
(Person.country)
# 中国
p1
=
Person(
"华青水上"
,
20
)
print
(p1.name)
print
(p1.age)
print
(p1.country)
# 中国
p1.show()
# 中国-华青水上-20
|
提示:当把每个对象中都存在的相同的示例变量时,可以选择把它放在类变量中,这样就可以避免对象中维护多个相同数据.
易错点 。
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
|
class
Person(
object
):
country
=
"中国"
def
__init__(
self
, name, age):
self
.name
=
name
self
.age
=
age
def
show(
self
):
message
=
"{}-{}-{}"
.
format
(
self
.country,
self
.name,
self
.age)
print
(message)
print
(Person.country)
# 中国
p1
=
Person(
"华青水上"
,
20
)
print
(p1.name)
# 华青水上
print
(p1.age)
# 20
print
(p1.country)
# 中国
p1.show()
# 中国-华青水上-20
p1.name
=
"root"
# 在对象p1中讲name重置为root
p1.num
=
19
# 在对象p1中新增实例变量 num=19
p1.country
=
"china"
# 在对象p1中新增实例变量 country="china"
print
(p1.country)
# china
print
(Person.country)
# 中国
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
class
Person(
object
):
country
=
"中国"
def
__init__(
self
, name, age):
self
.name
=
name
self
.age
=
age
def
show(
self
):
message
=
"{}-{}-{}"
.
format
(
self
.country,
self
.name,
self
.age)
print
(message)
print
(Person.country)
# 中国
Person.country
=
"美国"
p1
=
Person(
"华青水上"
,
20
)
print
(p1.name)
# 华青水上
print
(p1.age)
# 20
print
(p1.country)
# 美国
|
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
|
class
Base(
object
):
country
=
"中国"
class
Person(Base):
def
__init__(
self
, name, age):
self
.name
=
name
self
.age
=
age
def
show(
self
):
message
=
"{}-{}-{}"
.
format
(Person.country,
self
.name,
self
.age)
# message = "{}-{}-{}".format(self.country, self.name, self.age)
print
(message)
# 读
print
(Base.country)
# 中国
print
(Person.country)
# 中国
obj
=
Person(
"华青水上"
,
19
)
print
(obj.country)
# 中国
# 写
Base.country
=
"china"
Person.country
=
"泰国"
obj.country
=
"日本"
|
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
|
class
Foo(
object
):
def
__init__(
self
, name,age):
self
.name
=
name
self
.age
=
age
def
f1(
self
):
print
(
"绑定方法"
,
self
.name)
@classmethod
def
f2(
cls
):
print
(
"类方法"
,
cls
)
@staticmethod
def
f3():
print
(
"静态方法"
)
# 绑定方法(对象)
obj
=
Foo(
"武沛齐"
,
20
)
obj.f1()
# Foo.f1(obj)
# 类方法
Foo.f2()
# cls就是当前调用这个方法的类。(类)
obj.f2()
# cls就是当前调用这个方法的对象的类。
# 静态方法
Foo.f3()
# 类执行执行方法(类)
obj.f3()
# 对象执行执行方法
|
在Python中比较灵活,方法都可以通过对象和类进行调用;而在java、c#等语言中,绑定方法只能由对象调用;类方法或静态方法只能由类调用.
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
|
import
os
import
requests
class
Download(
object
):
def
__init__(
self
, folder_path):
self
.folder_path
=
folder_path
@staticmethod
def
download_dou_yin():
# 下载抖音
res
=
requests.get(
'.....'
)
with
open
(
"xxx.mp4"
, mode
=
'wb'
) as f:
f.write(res.content)
def
download_dou_yin_2(
self
):
# 下载抖音
res
=
requests.get(
'.....'
)
path
=
os.path.join(
self
.folder_path,
'xxx.mp4'
)
with
open
(path, mode
=
'wb'
) as f:
f.write(res.content)
obj
=
Download(
"video"
)
obj.download_dou_yin()
|
属性其实是由绑定方法 + 特殊装饰器 组合创造出来的,让我们以后在调用方法时可以不加括号.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
class
Foo(
object
):
def
__init__(
self
, name):
self
.name
=
name
def
f1(
self
):
return
123
@property
def
f2(
self
):
return
123
obj
=
Foo(
"华青水上"
)
v1
=
obj.f1()
print
(v1)
v2
=
obj.f2
print
(v2)
|
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
|
class
Pagination:
def
__init__(
self
, current_page, per_page_num
=
10
):
self
.per_page_num
=
per_page_num
if
not
current_page.isdecimal():
self
.current_page
=
1
return
current_page
=
int
(current_page)
if
current_page <
1
:
self
.current_page
=
1
return
self
.current_page
=
current_page
def
start(
self
):
return
(
self
.current_page
-
1
)
*
self
.per_page_num
def
end(
self
):
return
self
.current_page
*
self
.per_page_num
user_list
=
[
"用户-{}"
.
format
(i)
for
i
in
range
(
1
,
3000
)]
# 分页显示,每页显示10条
while
True
:
page
=
input
(
"请输入页码:"
)
# page,当前访问的页码
# 10,每页显示10条数据
# 内部执行Pagination类的init方法。
pg_object
=
Pagination(page,
20
)
page_data_list
=
user_list[ pg_object.start() : pg_object.end() ]
for
item
in
page_data_list:
print
(item)
|
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
|
class
Pagination:
def
__init__(
self
, current_page, per_page_num
=
10
):
self
.per_page_num
=
per_page_num
if
not
current_page.isdecimal():
self
.current_page
=
1
return
current_page
=
int
(current_page)
if
current_page <
1
:
self
.current_page
=
1
return
self
.current_page
=
current_page
@property
def
start(
self
):
return
(
self
.current_page
-
1
)
*
self
.per_page_num
@property
def
end(
self
):
return
self
.current_page
*
self
.per_page_num
user_list
=
[
"用户-{}"
.
format
(i)
for
i
in
range
(
1
,
3000
)]
# 分页显示,每页显示10条
while
True
:
page
=
input
(
"请输入页码:"
)
pg_object
=
Pagination(page,
20
)
page_data_list
=
user_list[ pg_object.start : pg_object.end ]
for
item
in
page_data_list:
print
(item)
|
关于属性的编写有两种方式:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
class
C(
object
):
@property
def
x(
self
):
pass
@x
.setter
def
x(
self
, value):
pass
@x
.deleter
def
x(
self
):
pass
obj
=
C()
obj.x
obj.x
=
123
del
obj.x
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
class
C(
object
):
def
getx(
self
):
pass
def
setx(
self
, value):
pass
def
delx(
self
):
pass
x
=
property
(getx, setx, delx,
"I'm the 'x' property."
)
obj
=
C()
obj.x
obj.x
=
123
del
obj.x
|
注意:由于属性和实例变量的调用方式相同,所以在编写时需要注意:属性名称 不要 实例变量 重名.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
class
Foo(
object
):
def
__init__(
self
, name, age):
self
.name
=
name
self
.age
=
age
@property
def
func(
self
):
return
123
obj
=
Foo(
"华青水上"
,
123
)
print
(obj.name)
|
一旦重名,可能就会有报错.
1
2
3
4
5
6
7
8
9
10
11
12
|
class
Foo(
object
):
def
__init__(
self
, name, age):
self
.name
=
name
# 报错,错认为你想要调用 @name.setter 装饰的方法。
self
.age
=
age
@property
def
name(
self
):
return
"{}-{}"
.
format
(
self
.name,
self
.age)
obj
=
Foo(
"华青水上"
,
123
)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
class
Foo(
object
):
def
__init__(
self
, name, age):
self
.name
=
name
self
.age
=
age
@property
def
name(
self
):
return
"{}-{}"
.
format
(
self
.name,
self
.age)
# 报错,循环调用自己(直到层级太深报错)
@name
.setter
def
name(
self
, value):
print
(value)
obj
=
Foo(
"华青水上"
,
123
)
print
(obj.name)
|
如果真的想要在名称上创建一些关系,可以让实例变量加上一个下划线.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
class
Foo(
object
):
def
__init__(
self
, name, age):
self
._name
=
name
self
.age
=
age
@property
def
name(
self
):
return
"{}-{}"
.
format
(
self
._name,
self
.age)
obj
=
Foo(
"华青水上"
,
123
)
print
(obj._name)
print
(obj.name)
|
Python中成员的修饰符就是指的是:公有、私有.
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
|
class
Foo(
object
):
def
__init__(
self
, name, age):
self
.__name
=
name
self
.age
=
age
def
get_data(
self
):
return
self
.__name
def
get_age(
self
):
return
self
.age
obj
=
Foo(
"华青水上"
,
123
)
# 公有成员
print
(obj.age)
v1
=
self
.get_age()
print
(v1)
# 私有成员
# print(obj.__name) # 错误,由于是私有成员,只能在类中进行使用。
v2
=
obj.get_data()
print
(v2)
|
特别提醒:父类中的私有成员,子类无法继承.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
class
Base(
object
):
def
__data(
self
):
print
(
"base.__data"
)
def
num(
self
):
print
(
"base.num"
)
class
Foo(Base):
def
func(
self
):
self
.num()
self
.__data()
# # 不允许执行父类中的私有方法
obj
=
Foo()
obj.func()
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
class
Base(
object
):
def
__data(
self
):
print
(
"base.__data"
)
def
num(
self
):
print
(
"base.num"
)
self
.__data()
# 不允许执行父类中的私有方法
class
Foo(Base):
def
func(
self
):
self
.num()
obj
=
Foo()
obj.func()
|
按理说私有成员是无法被外部调用,但如果用一些特殊的语法也可以(Flask源码中有这种写法,大家写代码不推荐这样写).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
class
Foo(
object
):
def
__init__(
self
):
self
.__num
=
123
self
.age
=
19
def
__msg(
self
):
print
(
1234
)
obj
=
Foo()
print
(obj.age)
print
(obj._Foo__num)
obj._Foo__msg()
|
成员是否可以作为独立的功能暴露给外部,让外部调用并使用.
在基于面向对象进行编程时,对象之间可以存在各种各样的关系,例如:组合、关联、依赖等(Java中的称呼),用大白话来说就是各种嵌套.
情景一:
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
|
class
Student(
object
):
""" 学生类 """
def
__init__(
self
, name, age):
self
.name
=
name
self
.age
=
age
def
message(
self
):
data
=
"我是一名学生,我叫:{},我今年{}岁"
.
format
(
self
.name,
self
.age)
print
(data)
s1
=
Student(
"华青水上"
,
19
)
s2
=
Student(
"殊途同归"
,
19
)
s3
=
Student(
"春花秋月"
,
19
)
class
Classes(
object
):
""" 班级类 """
def
__init__(
self
, title):
self
.title
=
title
self
.student_list
=
[]
def
add_student(
self
, stu_object):
self
.student_list.append(stu_object)
def
add_students(
self
, stu_object_list):
for
stu
in
stu_object_list:
self
.add_student(stu)
def
show_members(
self
):
for
item
in
self
.student_list:
# print(item)
item.message()
c1
=
Classes(
"三年二班"
)
c1.add_student(s1)
c1.add_students([s2, s3])
print
(c1.title)
print
(c1.student_list)
|
情景二:
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
|
class
Student(
object
):
""" 学生类 """
def
__init__(
self
, name, age, class_object):
self
.name
=
name
self
.age
=
age
self
.class_object
=
class_object
def
message(
self
):
data
=
"我是一名{}班的学生,我叫:{},我今年{}岁"
.
format
(
self
.class_object.title,
self
.name,
self
.age)
print
(data)
class
Classes(
object
):
""" 班级类 """
def
__init__(
self
, title):
self
.title
=
title
c1
=
Classes(
"Python全栈"
)
c2
=
Classes(
"Linux云计算"
)
user_object_list
=
[
Student(
"华青水上"
,
19
, c1),
Student(
"殊途同归"
,
19
, c1),
Student(
"春花秋月"
,
19
, c2)
]
for
obj
in
user_object_list:
print
(obj.name,obj.age, obj.class_object.title)
|
情景三:
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
|
class
Student(
object
):
""" 学生类 """
def
__init__(
self
, name, age, class_object):
self
.name
=
name
self
.age
=
age
self
.class_object
=
class_object
def
message(
self
):
data
=
"我是一名{}班的学生,我叫:{},我今年{}岁"
.
format
(
self
.class_object.title,
self
.name,
self
.age)
print
(data)
class
Classes(
object
):
""" 班级类 """
def
__init__(
self
, title, school_object):
self
.title
=
title
self
.school_object
=
school_object
class
School(
object
):
""" 学校类 """
def
__init__(
self
, name):
self
.name
=
name
s1
=
School(
"北京校区"
)
s2
=
School(
"上海校区"
)
c1
=
Classes(
"Python全栈"
, s1)
c2
=
Classes(
"Linux云计算"
, s2)
user_object_list
=
[
Student(
"华青水上"
,
19
, c1),
Student(
"殊途同归"
,
19
, c1),
Student(
"春花秋月"
,
19
, c2)
]
for
obj
in
user_object_list:
print
(obj.name, obj.class_object.title , obj.class_object.school_object.name)
|
在Python的类中存在一些特殊的方法,这些方法都是 __方法__ 格式,这种方法在内部均有特殊的含义,接下来我们来讲一些常见的特殊成员:
__init__
,初始化方法
1
2
3
4
5
6
|
class
Foo(
object
):
def
__init__(
self
, name):
self
.name
=
name
obj
=
Foo(
"华青水上"
)
|
__new__
,构造方法
1
2
3
4
5
6
7
8
9
10
11
|
class
Foo(
object
):
def
__init__(
self
, name):
print
(
"第二步:初始化对象,在空对象中创建数据"
)
self
.name
=
name
def
__new__(
cls
,
*
args,
*
*
kwargs):
print
(
"第一步:先创建空对象并返回"
)
return
object
.__new__(
cls
)
obj
=
Foo(
"华青水上"
)
|
__call__
1
2
3
4
5
6
7
|
class
Foo(
object
):
def
__call__(
self
,
*
args,
*
*
kwargs):
print
(
"执行call方法"
)
obj
=
Foo()
obj()
|
__str__
1
2
3
4
5
6
7
8
9
|
class
Foo(
object
):
def
__str__(
self
):
return
"哈哈哈哈"
obj
=
Foo()
data
=
str
(obj)
print
(data)
|
__dict__
1
2
3
4
5
6
7
8
|
class
Foo(
object
):
def
__init__(
self
, name, age):
self
.name
=
name
self
.age
=
age
obj
=
Foo(
"华青水上"
,
19
)
print
(obj.__dict__)
|
__getitem__
、__setitem__
、__delitem__
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
class
Foo(
object
):
def
__getitem__(
self
, item):
pass
def
__setitem__(
self
, key, value):
pass
def
__delitem__(
self
, key):
pass
obj
=
Foo(
"华青水上"
,
19
)
obj[
"x1"
]
obj[
'x2'
]
=
123
del
obj[
'x3'
]
|
__enter__
、__exit__
1
2
3
4
5
6
7
8
9
10
11
12
13
|
class
Foo(
object
):
def
__enter__(
self
):
print
(
"进入了"
)
return
666
def
__exit__(
self
, exc_type, exc_val, exc_tb):
print
(
"出去了"
)
obj
=
Foo()
with obj as data:
print
(data)
|
# 面试题(补充代码,实现如下功能) 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
class
Context:
def
__enter__(
self
):
return
self
def
__exit__(
self
, exc_type, exc_val, exc_tb):
pass
def
do_something(
self
):
# __enter__返回self才可以调用执行do_something方法
pass
with Context() as ctx:
ctx.do_something()
|
上述面试题属于上下文管理的语法.
__add__
等
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
class
Foo(
object
):
def
__init__(
self
, name):
self
.name
=
name
def
__add__(
self
, other):
return
"{}-{}"
.
format
(
self
.name, other.name)
v1
=
Foo(
"alex"
)
v2
=
Foo(
"sb"
)
# 对象+值,内部会去执行 对象.__add__方法,并将+后面的值当做参数传递过去。
v3
=
v1
+
v2
print
(v3)
|
__iter__
迭代器 。
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
|
# 迭代器类型的定义:
1.
当类中定义了 __iter__ 和 __next__ 两个方法。
2.__iter__
方法需要返回对象本身,即:
self
3.
__next__ 方法,返回下一个数据,如果没有数据了,则需要抛出一个StopIteration的异常。
官方文档:https:
/
/
docs.python.org
/
3
/
library
/
stdtypes.html
#iterator-types
# 创建 迭代器类型 :
class
IT(
object
):
def
__init__(
self
):
self
.counter
=
0
def
__iter__(
self
):
return
self
def
__next__(
self
):
self
.counter
+
=
1
if
self
.counter
=
=
3
:
raise
StopIteration()
return
self
.counter
# 根据类实例化创建一个迭代器对象:
obj1
=
IT()
# v1 = obj1.__next__()
# v2 = obj1.__next__()
# v3 = obj1.__next__() # 抛出异常
v1
=
next
(obj1)
# obj1.__next__()
print
(v1)
v2
=
next
(obj1)
print
(v2)
v3
=
next
(obj1)
print
(v3)
obj2
=
IT()
for
item
in
obj2:
# 首先会执行迭代器对象的__iter__方法并获取返回值,一直去反复的执行 next(对象)
print
(item)
|
迭代器对象支持通过next取值,如果取值结束则自动抛出StopIteration.
for循环内部在循环时,先执行__iter__方法,获取一个迭代器对象,然后不断执行的next取值(有异常StopIteration则终止循环).
生成器 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
# 创建生成器函数
def
func():
yield
1
yield
2
# 创建生成器对象(内部是根据生成器类generator创建的对象),生成器类的内部也声明了:__iter__、__next__ 方法。
obj1
=
func()
v1
=
next
(obj1)
print
(v1)
v2
=
next
(obj1)
print
(v2)
v3
=
next
(obj1)
print
(v3)
obj2
=
func()
for
item
in
obj2:
print
(item)
|
如果按照迭代器的规定来看,其实生成器类也是一种特殊的迭代器类(生成器也是一个中特殊的迭代器).
可迭代对象 。
1
2
3
4
5
6
7
8
9
10
11
12
|
# 如果一个类中有__iter__方法且返回一个迭代器对象 ;则我们称以这个类创建的对象为可迭代对象。
class
Foo(
object
):
def
__iter__(
self
):
return
迭代器对象(生成器对象)
obj
=
Foo()
# obj是 可迭代对象。
# 可迭代对象是可以使用for来进行循环,在循环的内部其实是先执行 __iter__ 方法,获取其迭代器对象,然后再在内部执行这个迭代器对象的next功能,逐步取值。
for
item
in
obj:
pass
|
可迭代对象是可以使用for来进行循环,在循环的内部其实是先执行 __iter__ 方法,获取其迭代器对象,然后再在内部执行这个迭代器对象的next功能,逐步取值.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
class
IT(
object
):
def
__init__(
self
):
self
.counter
=
0
def
__iter__(
self
):
return
self
def
__next__(
self
):
self
.counter
+
=
1
if
self
.counter
=
=
3
:
raise
StopIteration()
return
self
.counter
class
Foo(
object
):
def
__iter__(
self
):
return
IT()
obj
=
Foo()
# 可迭代对象
for
item
in
obj:
# 循环可迭代对象时,内部先执行obj.__iter__并获取迭代器对象;不断地执行迭代器对象的next方法。
print
(item)
|
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
|
# 基于可迭代对象&迭代器实现:自定义range
class
IterRange(
object
):
def
__init__(
self
, num):
self
.num
=
num
self
.counter
=
-
1
def
__iter__(
self
):
return
self
def
__next__(
self
):
self
.counter
+
=
1
if
self
.counter
=
=
self
.num:
raise
StopIteration()
return
self
.counter
class
Xrange
(
object
):
def
__init__(
self
, max_num):
self
.max_num
=
max_num
def
__iter__(
self
):
return
IterRange(
self
.max_num)
obj
=
Xrange
(
100
)
for
item
in
obj:
print
(item)
|
1
2
3
4
5
6
7
8
9
|
class
Foo(
object
):
def
__iter__(
self
):
yield
1
yield
2
obj
=
Foo()
for
item
in
obj:
print
(item)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
# 基于可迭代对象&生成器 实现:自定义range
class
Xrange
(
object
):
def
__init__(
self
, max_num):
self
.max_num
=
max_num
def
__iter__(
self
):
counter
=
0
while
counter <
self
.max_num:
yield
counter
counter
+
=
1
obj
=
Xrange
(
100
)
for
item
in
obj:
print
(item)
|
常见的数据类型:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
from
collections.abc
import
Iterator, Iterable
v1
=
[
11
,
22
,
33
]
print
(
isinstance
(v1, Iterator) )
# false,判断是否是迭代器;判断依据是__iter__ 和 __next__。
v2
=
v1.__iter__()
print
(
isinstance
(v2, Iterator) )
# True
v1
=
[
11
,
22
,
33
]
print
(
isinstance
(v1, Iterable) )
# True,判断依据是是否有 __iter__且返回迭代器对象。
v2
=
v1.__iter__()
print
(
isinstance
(v2, Iterable) )
# True,判断依据是是否有 __iter__且返回迭代器对象。
|
至此,Python进阶面向对象之成员总结完毕,如有不当之处欢迎指正.
到此这篇关于Python面向对象之成员相关知识总结的文章就介绍到这了,更多相关Python成员内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我! 。
原文链接:https://blog.csdn.net/r1141207831/article/details/117909535 。
最后此篇关于Python面向对象之成员相关知识总结的文章就讲到这里了,如果你想了解更多关于Python面向对象之成员相关知识总结的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
积累和总结,是长期持续的过程 01 最近,很多朋友微信私聊关于「 butte-java-note 」仓库的话题; 这个「 Git仓库 」每年都会
我即将参加挑战测试,所以我不必参加数据库处理类(class)。尽管在过去的 5 年里我一直在使用数据库,但我还是忍不住对测试感到紧张。这是 50 个问题,有 2 部分:真/假部分和我实际编写 SQL
我的 groovy 代码将 Rabbit Native Plugin 用于 grails: def handleMessage(def body, MessageContext context) {
我想看看是否有人可以就我在 .NET 环境中的进一步知识提供任何建议... 这里有一点背景。我上了一所大学并获得了计算机科学学士学位(主要从事 C、Java 和 C++ 方面的工作)。大学毕业后在一家
我在 postgres 数据库中有一个表,该表用于测试环境,我们需要一次添加和删除多个列。问题是 postgres 最多有 1600 列,并且这个计数包括丢弃的列。我的表永远不会有 1600 个“未丢
作为业余程序员 3 年(主要是 Python 和 C)并且从未编写过超过 500 行代码的应用程序,我发现自己面临两个选择: (1) 学习数据结构和算法设计的基本知识,使我成为一名 l33t 计算机科
有人能告诉我为什么 Android 工作需要 Linux 知识吗?许多 Android 工作都以 Linux 作为先决条件。我可以很好地从 Windows 机器开发 Android 应用程序吗? 最佳
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 10 年前。 Improve thi
是否可以在 Drools 中保持知识 session ?如果是这样,如何? 我将事实存储在数据库中,并且每次添加新事实时,我都希望避免在新 session 中重新加载所有事实。 目前,当有新事实时,该
我对 C++ 有很好的了解,但从未深入研究 STL。我必须学习 STL 的哪一部分才能提高工作效率并减少工作中的缺陷? 谢谢。 最佳答案 I have good knowledge of C++ 恕我
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 9 年前。 Improve
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 7 年前。 Improve
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
在我从 SO answers here 和许多 BackBoneJs 示例中选择的示例之一中,我看到初始化函数知道模型将使用哪个 View 进行渲染。我不知道我现在有点偏见,这是一个好的做法还是取决于
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 12 年前。 Improve thi
我在我的网站上使用 C# 和 ASP.NET MVC 3 实现 OpenID 和 OAuth。我基于 DotNetOpenAuth用于后端和openid-selector对于前端。 我喜欢 openi
很长一段时间以来,我都在思考和研究C语言编译器以汇编形式的输出,以及CPU架构。我知道这对你来说可能很愚蠢,但在我看来有些东西是非常无效的。如果我错了,请不要生气,我不明白所有这些原则是有原因的。如果
我有一些 Python 知识,但我从来不认为自己对这门语言特别流利。我正在开发一个潜在的机器视觉项目,该项目将从 SimpleCV 中受益匪浅,但从时间的角度来看,我宁愿不必非常流利地使用 pytho
我是一名优秀的程序员,十分优秀!