REVENGE_777
1天前
如果不创建class类的话,直接使用dog.name是会报错的,因为一般数据类型不接受这种调用方式
0赞 · 0采集
潘某人永不屈服
2天前
class Student()定义的时候,需要在括号内写明继承的类Person
在__init__()方法,需要调用super(Student, self).__init__(name, gender),来初始化从父类继承过来的属性
0赞 · 0采集
潘某人永不屈服
3天前
加双下划线__ 的目的大概就是防止编码过程中试图使用实例修改类属性,加上__的话,在做这样的尝试时会报错,防止编码者在达不到目的的情况下还察觉不到错误
0赞 · 0采集
qq_一生所爱_6
5天前
定义类属性可以直接在 class 中定义,比如在前面的Animal类中,加入地域的类属性:class Animal(object):
localtion = 'Asia'
def __init__(self, name, age):
self.name = name
self.age = age
此后,通过Animal()实例化的所有对象,都可以访问到localtion,并且得到唯一的结果。dog = Animal('wangwang', 1)
cat = Animal('mimi', 3)
print(dog.localtion) # ==> Asia
print(cat.localtion) # ==> Asia
# 类属性,也可以通过类名直接访问
print(Animal.localtion) # ==> Asia
类属性也是可以动态添加和修改的,需要注意的是,因为类属性只有一份,所以改变了,所有实例可以访问到的类属性都会变更:
0赞 · 0采集
qq_一生所爱_6
5天前
在定义 Person 类时,可以为Person类添加一个特殊的__init__()方法,当创建实例时,__init__()方法被自动调用,我们就能在此为每个实例都统一加上以下属性:class Person(object):
def __init__(self, name, sex, age):
self.name = name
self.sex = sex
self.age = age
在实例化的时候,需要提供除self以外的所有参数。xiaoming = Person('Xiao Ming', 'boy', 13)
xiaohong = Person('Xiao Hong', 'girl', 14)
0赞 · 0采集
qq_一生所爱_6
5天前
这些属性也可以和普通变量一样进行运算。比如xiaohong长大了一岁:xiaohong.age = xiaohong.age + 1
0赞 · 0采集
qq_一生所爱_6
5天前
在Python中,通过class关键字定义一个类,比如我们需要定义一个人的类。按照 Python 的编程习惯,类名以大写字母开头。因此可以这样定义:class Person: pass
定义了类之后,就可以对类进行实例化了,实例化是指,把抽象的类,赋予实物的过程。比如,定义好Person这个类后,就可以实例化多个Person出来了。
创建实例使用类名+(),类似函数调用的形式创建:class Person(object): pass xiaohong = Person() xiaoming = Person()
0赞 · 0采集
AE86S
2021-01-23
str() 化为字符型
0赞 · 0采集
粗实而夜雨
2021-01-23
# Enter a code
import time
def performance(f):
def fn(*args,**kwargs):
t1 = time.time()
r = f(*args,**kwargs)
t2 = time.time()
print('call %s() in %fs' % (f.__name__, (t2-t1)))
return r
return fn
@performance
def factorial(n):
return reduce(lambda x,y: x*y, range(1, n+1))
print(factorial(10))
0赞 · 0采集
酷思
2021-01-20
继承
截图
0赞 · 0采集
4073846
2021-01-19
Python类的定义与实例化
在Python中,通过class关键字定义一个类,比如我们需要定义一个人的类。按照 Python 的编程习惯,类名以大写字母开头。因此可以这样定义:
class Person: pass
注意,在这个Person类的定义里面,并没有继承任何类,除了这样定义以外,还可以有以下两种定义方式。
class Person(): pass class Person(object): pass
这三种情况有什么区别呢?在Python3中,是没有区别的,但是在Python2中,则有一定的区别。
在Python2中,对于第一种定义的方法,Person类只有有限的几个内建函数'__doc__', '__module__', 'name',而对于第二种、第三种定义的方法,则会继承Python object对象的更多的内建函数,可以更便捷的操作对象。这是Python2版本的差异。在Python3中,我们只需要知道这三种方式都可以定义一个类即可。
定义了类之后,就可以对类进行实例化了,实例化是指,把抽象的类,赋予实物的过程。比如,定义好Person这个类后,就可以实例化多个Person出来了。
创建实例使用类名+(),类似函数调用的形式创建:
class Person(object): pass xiaohong = Person() xiaoming = Person()
任务
请练习定义一个动物类,并创建出两个实例dog, cat,打印实例,再比较两个实例是否相等。
index.py
# Enter a code
本节编程练习不计算学习进度,请电脑登录imooc.com操作
1赞 · 0采集
4073846
2021-01-19
什么是面向对象编程
截图
0赞 · 0采集
4073846
2021-01-19
面相对象
截图
0赞 · 0采集
qq_慕仙9428847
2021-01-19
8-5骄傲!!!
0赞 · 0采集
qq_慕仙9428847
2021-01-19
def add(x,y,f):
return f(x)+f(y)
import math
print(add(25,9,math.sqrt))#粗体字后面不要括号 号
另外,传数的时候不能传入变量
0赞 · 0采集
qq_慕仙9428847
2021-01-19
print(a[::-1])
### 取从后向前(相反)的元素
print(a[2::-1])
### 取从下标为2的元素翻转读取
0赞 · 0采集
qq_慕仙9428847
2021-01-18
class Person(object):
__slots__ = ('name', 'gender')
def __init__(self, name, gender):
self.name = name
self.gender = gender
class Students(Person):
__slots__ = ('score')
def __init__(self,gender,name,score):
self.name=name
self.gender=gender
self.score=score
Tom=Students('Ketty','girl',89)
print(Tom.score)
print(Tom.name)
print(Tom.gender)
运行成功
结果为:
89
Ketty
girl
所以要再改的话就要再定义一遍!!!!!!!!!!
0赞 · 0采集
qq_慕仙9428847
2021-01-18
class Person(object):
__slots__ = ('name', 'gender')
def __init__(self, name, gender):
self.name = name
self.gender = gender
class Students(Person):
__slots__ = ('score')
def __init__(self,score):
#self.name=name
#self.gender=gender
self.score=score
#Tom=Students('Ketty','girl',89)
Tom=Students(89)
print(Tom.score)
可以输出89
0赞 · 0采集
qq_慕仙9428847
2021-01-18
class Person(object):
__slots__ = ('name', 'gender')
def __init__(self, name, gender):
self.name = name
self.gender = gender
class Students(Person):
__slots__ = ('score')
def __init__(self,score):
self.score=score
Tom=Students('Ketty','girl',89)
print(Students(Tom.score))
运行失败!!!!!!!!!!
0赞 · 0采集
qq_慕仙9428847
2021-01-18
需要注意__add__()函数,它有一个参数,表示的是运算的第二个操作数,比如:r1 + r2,那么在__add__()方法中的参数,r指的就是r2,这个参数是运算符重载的时候传递的
0赞 · 0采集
qq_慕仙9428847
2021-01-18
4-3没看懂
0赞 · 0采集
qq_慕仙9428847
2021-01-18
a, b = b, a + b 这句语句表示b的值赋给a,a+b的值赋给b,所以a的值变了
0赞 · 0采集
qq_慕仙9428847
2021-01-18
getattr(p, 'name') # 获取name属性
'Alice'
setattr(p, 'name', 'Adam') # 设置新的name属性
0赞 · 0采集
qq_慕仙9428847
2021-01-18
def func(a, b, c=0, *args, **kw):
print 'a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw
在函数调用的时候,Python解释器自动按照参数位置和参数名把对应的参数传进去。>>> func(1, 2)a = 1 b = 2 c = 0 args = () kw = {}>>> func(1, 2, c=3)a = 1 b = 2 c = 3 args = () kw = {}>>> func(1, 2, 3, 'a', 'b')a = 1 b = 2 c = 3 args = ('a', 'b') kw = {}>>> func(1, 2, 3, 'a', 'b', x=99)a = 1 b = 2 c = 3 args = ('a', 'b') kw = {'x': 99}
0赞 · 0采集
qq_慕仙9428847
2021-01-18
print(Animal.get_localtion())
Animal.set_localtion(3)
print(Animal.get_localtion())
0赞 · 0采集
qq_慕仙9428847
2021-01-18
def set_name(self, name):方法就是为了修改私有属性的值。要是不用这个方法,也可以在get_name()中添加相应的代码也可以实现。
def get_name(self, name):
self.__name = name
return self.__name
但是,在实例化对象后调用的时候,就需要带上修改的参数,比如:
cat = Animal()
print(cat.get_name('mimi'))
0赞 · 0采集
qq_慕仙9428847
2021-01-18
class Animal(object):
def __init__(self, name, age, localtion):
self.name = name
self.age = age
self.localtion2= localtion
dog = Animal('wangwang', 1, 'GuangDong')
print(dog.name)
print(dog.age)
print(dog.localtion2)
运行成功wangwang
1
GuangDong
0赞 · 0采集
qq_慕仙9428847
2021-01-18
在外部访问私有属性将会抛出异常,提示没有这个属性。
虽然私有属性无法从外部访问,但是,从类的内部是可以访问的。私有属性是为了保护类或实例属性不被外部污染而设计的。
0赞 · 0采集
qq_慕仙9428847
2021-01-18
在类属性和实例属性同时存在的情况下,实例属性的优先级是要高于类属性的,在操作实例的时候,优先是操作实例的属性,另外,当实例没有和类同名的时候,通过实例对象,不可以修改类属性,通过实例方法修改类属性,只是给实例绑定了一个对应的实例属性
0赞 · 0采集
qq_慕仙9428847
2021-01-18
类属性也是可以动态添加和修改的,需要注意的是,因为类属性只有一份,所以改变了,所有实例可以访问到的类属性都会变更
def与引用函数差不多有什么都需要执行的操作可以直接在def __init__(self,name,age):里写
0赞 · 0采集