python中的class类使用方法[探索3]

python中的scope和namespace

(1)namespace是名字和对象的映射,多数名称空间使用dict来实现,不同namespace中的名称没有关系
(2)模块.xx, xx表示模块对象中的一个属性,可以是一个函数。
(3)scope是python程序的一个namespace可以直接访问的一个文本范围

class

类定义与函数定义相似,通常在类中的语句都是函数定义def,当进入一个类定义时,一个的namespace被创建,并被当做局部scope来使用。
参考博客:
https://blog.csdn.net/on_1y/article/details/8640012

1.classisinstance
class A:
  pass #pass不起任何作用,只占位
class B(A):
  pass
isinstance(B(),A) #注意这里不能写成isinstance(B,A)
输出:
True
2.class
2.1类对象
class first: #建立了一个名叫first的类,并且一个新的namespace被创建
  i=1 #在这个namespace中创建了一个名字i,也叫数据属性
  def f(self): #在first类中定义了一个f函数,也叫方法
    return "hello"

first.i #类对象的属性引用
输出:
1

x=first() #将类对象实例化,也就是再在类名first后面加上函数标记
x.i #使用函数的形式进行属性引用
输出:
1

class first:
  def __init__(self,Ar,Br): #为类的实例化提供初始值,在类实例化时会自动调用init
    #data,A,B都是属性
    self.data=[]
    self.A=Ar
    self.B=Br

first.i #由于前后两个的类名相同,所以会被后面的覆盖掉


x=first(3,4) #类对象first实例化
输出:
__main__.first

x.A #对实例化后的first进行属性引用
输出:
3

x.B
输出:
4

x.data
输出:


class first: #建立了一个名叫first的类,并且一个新的namespace被创建
  i=1 #在这个namespace中创建了一个名字i,也叫数据属性
  def f(self): #在first类中定义了一个f函数,也叫方法
    return "hello"

x=first() #实例化

x.f
输出:
<bound method first.f of <__main__.first object at 0x7f8f016830f0>>

x.f() #使用实例化first中的f方法
输出:
'hello'

first.f(x) #与前者等价
输出:
'hello'

注意:如果数据属性与方法名称相同,前者会覆盖后者,所以方法名最好大写,数据属性前加_,数据属性可以被方法引用,方法第一个参数是self,方法函数定义可以在类外


def F(self,x,y): #方法名称大写,且放在类定义外面
  print(self.data) #在外面使用了class里面init的参数值
  return min(x,y)

class c:
  f=F #调用了外面的F方法
  def __init__(self):
    self.data=1
  def G(self): #类c中的第二个方法
    print(self.data) #不能只用data
    return "hello"
  h=G

x=c() #实例化

x.h()
输出:
1
'hello'

x.f(0,2)
输出:
1
0

2.2Exceptions类

class B:
  pass
class C(B): #C继承了B
  pass
class D(C): #D继承了C,也就是B,C,D是同个东西
  pass

for c in [B,C,D]:
  try:
    raise c()
  except D:
    print("D")
  except C:
    print("C")
  except B:
    print("B")


2.3迭代器

class Reverse: #将self.data数据从后往前迭代输出
  def __init__(self,data): #初始化中加了一个data
     self.data=data
     self.index=len(data)
  def __iter__(self):
    return self
  def next(self,b):
    if self.index==0:
      raise StopIteration
    print(b)
    self.index=self.index-1
    return self.data[self.index]

reverse=Reverse('abc') #实例化,Reverse的输入参数只看init中的参数

reverse.next(1) #next只看里面的参数,所以必须要有b
输出:
1
c

d=reverse.__iter__()

def reverse(data): #由于reverse函数中带有yield,所以这个函数变成了生成器,所以会自带next函数
  for index in range(len(data)):
    yield data[index] #return,yield只能放在函数里面

for char in reverse('abc'):
  print(char)
输出:
a
b
c

[63]
data='abc'
for index in range(len(data)):
  print(data[index]) 
输出:
a
b
c

本人现在的研究方向是:
图像的语义分割,如果有志同道合的朋友,可以组队学习
haiyangpengai@gmail.com qq:1355365561

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值